目录
一、Collections工具类
特点01:类似于Arrays类是操作数组的工具类,Collecitons是一个操作List/Set/Map的工具类(注意不是只能操作Collection接口,还能操作Map接口)
特点02:静态static方法,可以直接通过Collections类名去调用
二、常用方法
2.1 排序操作(只针对有序的List):
reverse(List): 反转List中元素的顺序
shuffle(List): 对List集合元素进行随机排序
sort(List): 自然排序,升序排序
sort(List, Comparator):定制排序
swap(List, int i,int j):交换下标为i的元素和下标为j的元素
ArrayList list = new ArrayList();
list.add(-2);
list.add(98);
list.add(25);
list.add(0);
list.add(25);
list.add(25);
//1)reverse()
Collections.reverse(list);
System.out.println(list);
//2)shuffle()
Collections.shuffle(list);
System.out.println(list);
//3)sort()
Collections.sort(list);
System.out.println(list);
//4)swap()
Collections.swap(list, 2,3);
System.out.println(list);
2.2 查找、替换操作:
Object max(Collection):根据元素的自然排序,返回最大值
Object max(Collection,Comparator):根据元素的定制排序,返回最大值
Object min(Collection):根据元素的自然排序,返回最小值
Object min(Collection,Comparator):根据元素的定制排序,返回最小值
int frequency(Collection, Object):返回指定元素在Collection中出现了几次
void copy(List dest, List src):将src中的内容复制到dest中
boolean replaceAll(List list, Object oldVal, Object newVal):使用新值替换List对象的所有旧值
ArrayList list = new ArrayList();
list.add(-2);
list.add(98);
list.add(25);
list.add(0);
list.add(25);
list.add(25);
//1)max
System.out.println(Collections.max(list)); //98
//2)min
System.out.println(Collections.min(list)); //-2
//3)frequency
System.out.println(Collections.frequency(list, 25));//3
copy方法有一个需要注意的地方:
为什么会报这个错误?需要点开copy函数查看内部逻辑
我们的src里放了6个元素,size为6,dest里一个元素都没有放,size为0。所以满足了上面的if语句,报出异常。所以我们要想办法把dest的size“撑开”,当然addAll可以行
list2.addAll(list);
但这样并不是一个好办法。
正确的写法为:
ArrayList list = new ArrayList();
list.add(-2);
list.add(98);
list.add(25);
list.add(0);
list.add(25);
list.add(25);
//4) copy
List list2 = Arrays.asList(new Object[list.size()]);
Collections.copy(list2,list);
System.out.println(list2);
2.3 同步控制
前面已经说过ArrayList和HashMap是线程不安全的,即便是为了线程安全我们也不会使用Vector或HashTable。而是使用Collections工具类的synchronizedXxx()方法
面试题:Collection和Collections的区别