Collections工具类_动力节点Java学院整理
Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法:
1.排序操作(主要针对List接口相关)
- reverse(Listlist):反转指定List集合中元素的顺序
- shuffle(Listlist):对List中的元素进行随机排序(洗牌)
- sort(Listlist):对List里的元素根据自然升序排序
- sort(Listlist,Comparatorc):自定义比较器进行排序
- swap(Listlist,inti,intj):将指定List集合中i处元素和j出元素进行交换
- rotate(Listlist,intdistance):将所有元素向右移位指定长度,如果distance等于size那么结果不变
publicvoidtestSort(){
System.out.println("原始顺序:"+list);
Collections.reverse(list);
System.out.println("reverse后顺序:"+list);
Collections.shuffle(list);
System.out.println("shuffle后顺序:"+list);
Collections.swap(list,1,3);
System.out.println("swap后顺序:"+list);
Collections.sort(list);
System.out.println("sort后顺序:"+list);
Collections.rotate(list,1);
System.out.println("rotate后顺序:"+list);
}
输出
原始顺序:[b张三,d孙六,a李四,e钱七,c赵五]
reverse后顺序:[c赵五,e钱七,a李四,d孙六,b张三]
shuffle后顺序:[b张三,c赵五,d孙六,e钱七,a李四]
swap后顺序:[b张三,e钱七,d孙六,c赵五,a李四]
sort后顺序:[a李四,b张三,c赵五,d孙六,e钱七]
rotate后顺序:[e钱七,a李四,b张三,c赵五,d孙六]
2.查找和替换(主要针对Collection接口相关)
- binarySearch(Listlist,Objectkey):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
- max(Collectioncoll):返回最大元素
- max(Collectioncoll,Comparatorcomp):根据自定义比较器,返回最大元素
- min(Collectioncoll):返回最小元素
- min(Collectioncoll,Comparatorcomp):根据自定义比较器,返回最小元素
- fill(Listlist,Objectobj):使用指定对象填充
- frequency(CollectionObjecto):返回指定集合中指定对象出现的次数
- replaceAll(Listlist,Objectold,Objectnew):替换
publicvoidtestSearch(){
System.out.println("给定的list:"+list);
System.out.println("max:"+Collections.max(list));
System.out.println("min:"+Collections.min(list));
System.out.println("frequency:"+Collections.frequency(list,"a李四"));
Collections.replaceAll(list,"a李四","aa李四");
System.out.println("replaceAll之后:"+list);
//如果binarySearch的对象没有排序的话,搜索结果是不确定的
System.out.println("binarySearch在sort之前:"+Collections.binarySearch(list,"c赵五"));
Collections.sort(list);
//sort之后,结果出来了
System.out.println("binarySearch在sort之后:"+Collections.binarySearch(list,"c赵五"));
Collections.fill(list,"A");
System.out.println("fill:"+list);
}
输出
给定的list:[b张三,d孙六,a李四,e钱七,c赵五]
max:e钱七
min:a李四
frequency:1
replaceAll之后:[b张三,d孙六,aa李四,e钱七,c赵五]
binarySearch在sort之前:-4
binarySearch在sort之后:2
fill:[A,A,A,A,A]
3.同步控制
Collections工具类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。HashSet、ArrayList、HashMap都是线程不安全的,如果需要考虑同步,则使用这些方法。这些方法主要有:synchronizedSet、synchronizedSortedSet、synchronizedList、synchronizedMap、synchronizedSortedMap。
特别需要指出的是,在使用迭代方法遍历集合时需要手工同步返回的集合。
Mapm=Collections.synchronizedMap(newHashMap());
...
Sets=m.keySet();//Needn'tbeinsynchronizedblock
...
synchronized(m){//Synchronizingonm,nots!
Iteratori=s.iterator();//Mustbeinsynchronizedblock
while(i.hasNext())
foo(i.next());
}
4.设置不可变集合
Collections有三类方法可返回一个不可变集合:
1. emptyXxx():返回一个空的不可变的集合对象
2. singletonXxx():返回一个只包含指定对象的,不可变的集合对象。
3. unmodifiableXxx():返回指定集合对象的不可变视图
publicvoidtestUnmodifiable(){
System.out.println("给定的list:"+list);
ListunmodList=Collections.unmodifiableList(list);
unmodList.add("再加个试试!");//抛出:java.lang.UnsupportedOperationException
//这一行不会执行了
System.out.println("新的unmodList:"+unmodList);
}
5.其它
1. disjoint(Collection>c1,Collection>c2)-如果两个指定collection中没有相同的元素,则返回true。
2. addAll(Collectionc,T...a)-一种方便的方式,将所有指定元素添加到指定collection中。示范:
Collections.addAll(flavors,"Peaches'nPlutonium","RockyRacoon");
3. Comparator
publicvoidtestOther(){
Listlist1=newArrayList();
Listlist2=newArrayList();
//addAll增加变长参数
Collections.addAll(list1,"大家好","你好","我也好");
Collections.addAll(list2,"大家好","a李四","我也好");
//disjoint检查两个Collection是否的交集
booleanb1=Collections.disjoint(list,list1);
booleanb2=Collections.disjoint(list,list2);
System.out.println(b1+"\t"+b2);
//利用reverseOrder倒序
Collections.sort(list1,Collections.reverseOrder());
System.out.println(list1);
}
输出
truefalse
[我也好,大家好,你好]
6.完整代码
packagecom.bjpowernode.test;
importjava.util.*;
importorg.junit.Before;
importorg.junit.Test;
publicclassCollectionsTest{
privateListlist=newArrayList();
@Before
publicvoidinit(){
//准备测试数据
list.add("b张三");
list.add("d孙六");
list.add("a李四");
list.add("e钱七");
list.add("c赵五");
}
@Test
publicvoidtestUnmodifiable(){
System.out.println("给定的list:"+list);
ListunmodList=Collections.unmodifiableList(list);
unmodList.add("再加个试试!");//抛出:java.lang.UnsupportedOperationException
//这一行不会执行了
System.out.println("新的unmodList:"+unmodList);
}
@Test
publicvoidtestSort(){
System.out.println("原始顺序:"+list);
Collections.reverse(list);
System.out.println("reverse后顺序:"+list);
Collections.shuffle(list);
System.out.println("shuffle后顺序:"+list);
Collections.swap(list,1,3);
System.out.println("swap后顺序:"+list);
Collections.sort(list);
System.out.println("sort后顺序:"+list);
Collections.rotate(list,1);
System.out.println("rotate后顺序:"+list);
}
@Test
publicvoidtestSearch(){
System.out.println("给定的list:"+list);
System.out.println("max:"+Collections.max(list));
System.out.println("min:"+Collections.min(list));
System.out.println("frequency:"+Collections.frequency(list,"a李四"));
Collections.replaceAll(list,"a李四","aa李四");
System.out.println("replaceAll之后:"+list);
//如果binarySearch的对象没有排序的话,搜索结果是不确定的
System.out.println("binarySearch在sort之前:"+Collections.binarySearch(list,"c赵五"));
Collections.sort(list);
//sort之后,结果出来了
System.out.println("binarySearch在sort之后:"+Collections.binarySearch(list,"c赵五"));
Collections.fill(list,"A");
System.out.println("fill:"+list);
}
@Test
publicvoidtestOther(){
Listlist1=newArrayList();
Listlist2=newArrayList();
//addAll增加变长参数
Collections.addAll(list1,"大家好","你好","我也好");
Collections.addAll(list2,"大家好","a李四","我也好");
//disjoint检查两个Collection是否的交集
booleanb1=Collections.disjoint(list,list1);
booleanb2=Collections.disjoint(list,list2);
System.out.println(b1+"\t"+b2);
//利用reverseOrder倒序
Collections.sort(list1,Collections.reverseOrder());
System.out.println(list1);
}
}
以上所述是小编给大家介绍的Collections工具类_动力节点Java学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!