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 (); List list2=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); List unmodList=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(){ List list1=newArrayList (); List list2=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学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!