赞
踩
1. List集合转数组
List集合中提供toArray方法,toArray有两个重载的方法:
list.toArray()
,将list直接转为Object[] 数组;list.toArray(T[] a)
,将list转化为你所需要类型的数组,但注意要和list数据类型一致。2. 判断List集合中是否存在某个字符串
使用 java.util.List.contains(Object)
boolean contains(Object o);
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
一般情况下我们没有重写equals()方法,这时就会调用继承自object类的equals()方法,而object的equals()方法,实际就是 ==
,对于引用数据类型而言,==
比较的是内存地址。
public boolean equals(Object obj) {
return (this == obj);
}
所以对于一个对象而言,用contains判断List<Pojo>
是否存在某一个对象是不行的,除非重写equals()方法,像List<String>
,String类重写了equals()方法,比较的是对象的内容。
3. 针对ArrayList自定义排序的2种实现方法
public class Student implements Comparable{
......
@Override
public int compareTo(Object o) {
......
}
}
public class Test {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(1, "A", 20, 180));
list.add(new Student(2, "B", 21, 175));
list.add(new Student(3, "C", 22, 190));
list.add(new Student(4, "D", 21, 170));
Collections.sort(list);
......
}
}
public class Test { public static void main(String[] args) { List<Student> list = new ArrayList<>(); list.add(new Student(1, "A", 20, 180)); list.add(new Student(2, "B", 21, 175)); list.add(new Student(3, "C", 22, 190)); list.add(new Student(4, "D", 21, 170)); list.add(new Student(5, "E", 20, 185)); Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { if(o1.getAge() >= o2.getAge()) { return 1; } else { return -1; } } }); ...... } }
4. List集合去重
// 创建一个ArrayList 包含两个相同元素"111"
List<String> list = new ArrayList<String>();
list.add("111");
list.add("111");
list.add("222");
// 创建HashSet集合
Set set = new HashSet();
set.addAll(list); // 将list所有元素添加到set中 set集合特性会自动去重复
list.clear();
list.addAll(set); // 将list清空并将set中的所有元素添加到list中
java8 stream api
// Collectors.toList方法是获取list类型的收集器 distinct方法进行去重 collect进行转换
// list2就是去重后得到的结果,可以看出java8的stream api使用很方便。
List<Object> list2 = list.stream().distinct().collect(Collectors.toList());
5. List集合如何遍历时删除数据?
Iterator
迭代器提供的Iterator.remove
方法在遍历集合时删除集合元素;Java 8新增的removeIf
方法在遍历集合时删除集合元素。/** * 使用Iterator的方式也可以顺利删除和遍历,不会有任何问题,这才是删除变量List中元素的正确方式 */ public static void iteratorRemove() { List<Student> list = new ArrayList<>(); for (int i = 1; i <= LIST_SIZE; i++) { list.add(new Student(i, "Student" + i)); } Iterator<Student> iterator = list.iterator(); long millionSeconds = System.currentTimeMillis(); while (iterator.hasNext()) { Student student = iterator.next(); if (student.getId() % CONDITION_NUM == 0) { iterator.remove(); } } System.out.println("iteratorRemove操作耗时:" + (System.currentTimeMillis() - millionSeconds)); } /** * 也可以使用Java 8新增的removeIf方法在遍历时删除List中的元素,该方法也使用Iterator了,所以删除是安全的 */ public static void ifRemove() { List<Student> list = new ArrayList<>(); for (int i = 1; i <= LIST_SIZE; i++) { list.add(new Student(i, "Student" + i)); } long millionSeconds = System.currentTimeMillis(); list.removeIf(student -> student.getId() % CONDITION_NUM == 0); System.out.println("ifRemove操作耗时:" + (System.currentTimeMillis() - millionSeconds)); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。