操作集合的工具类:Collections

Java提供了操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询
和修改等操作,还提供了将集合对象设置为不可变、对集合对象实现同步控制等方法。 

排序操作

Collections提供了如下几个方法用于对List集合元素进行排序:
== static void reverse(List list):反转指定List集合元素的顺序。
== static void shuffle(List list):对List集合元素进行随机排序
== static void sort(List list):根据元素的自然顺序对指定List集合的元素按升序进行排序
== static void sort(List list,Comparator c):根据指定Comparator产生的顺序对List集合的元素进行排序
== static void swap(List list,int i,int j):将指定List集合中i元素和j元素进行交换
== static void rotate (list list,int distance):将指定List集合中i出元素和list.length -1 -i处的元素
进行交换。

下面程序简单示范了利用Collections工具类来操作List集合:

[java]  view plain copy
  1. public class TestSort {  
  2.   
  3.     public static void main(String[] args) {  
  4.         ArrayList nums = new ArrayList();  
  5.         nums.add(2);  
  6.         nums.add(-5);  
  7.         nums.add(3);  
  8.         nums.add(0);  
  9.         System.out.println(nums);  
  10.         //输出[2, -5, 3, 0]  
  11.           
  12.         //将List集合元素的次序反转  
  13.         Collections.reverse(nums);  
  14.         System.out.println(nums);  
  15.         //输出[0, 3, -5, 2]  
  16.           
  17.         //将List集合元素按自然顺序排序  
  18.         Collections.sort(nums);  
  19.         System.out.println(nums);  
  20.         //输出[-5, 0, 2, 3]  
  21.           
  22.         //将List按照集合元素的按随机顺序排序  
  23.         Collections.shuffle(nums);  
  24.         System.out.println(nums);  
  25.         //输出[2, 0, -5, 3]  
  26.           
  27.     }  
  28. }  

查找,替换操作

Collections还提供了如下用于查找、替换集合元素的常用方法。 
== static int binarySearch(List list,Object key):使用二分搜索法搜索指定List集合,以获得指定对象在List
集合中的索引。如果要该方法可以正常工作,必须保证List中的元素已经处于有序状态。
== static Obejct mx(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。
下面还有很多api就不一一列举出来了。

同步操作

Collections类中提供了多个synchronizedXxx()方法,该方法返回指定集合对象对应的同步对象,从而可以解决多
线程并发访问集合时的线程安全问题。
Java常用的集合框架中推荐使用的三个实现类:HashSet、ArrayList和HashMap都是线程不安全的。如果有多条线程访问
他们,而且有超过一条的线程试图修改它们,则可能出现错误。Collections提供了多个静态方法用于创建同步集合。
下面程序创建了四个同步集合对象:

[java]  view plain copy
  1. public class TestSynchronized {  
  2.     public static void main(String[] args) {  
  3.         //下面程序创建了四个同步的集合对象  
  4.         Collection c = Collections.synchronizedCollection(new ArrayList());  
  5.         List list = Collections.synchronizedList(new ArrayList());  
  6.         Set set = Collections.synchronizedSet(new HashSet());  
  7.         Map map = Collections.synchronizedMap(new HashMap());  
  8.     }  
  9. }  

在上面的程序中,直接将创建的集合对象传给了Collections的synchronizedXxx方法,这样就直接获取List、Set和
Map的线程安全实现版本。 

设置不可变集合

Collections类中提供了如下三类方法来返回一个不可变的集合:
== emptyXxx(): 返回一个空的、不可变的集合对象。此处的集合既可以是List,也可以是Set,还可以是Map。
== singletonXxx():返回一个只包含指定对象(只有一个或一项元素)的、不可变的集合对象,此处的集合既可以是List
,也可以是Set,还可以是Map。 
== unmodifiableXxx:返回指定集合对象的不可变视图。此处的集合既可以是List,也可以是Set,还可以是Map。
上面三类方法的参数是原来的集合对象,返回值是该集合的“只读版本”。通过上面Collections提供三类方法,可以生成
“只读”的Collections或Map。 看下面程序:

[java]  view plain copy
  1. public class TestUnmodifiable {  
  2.     public static void main(String[] args) {  
  3.         //创建一个空的不可改变的List对象  
  4.         List unmodifiableList = Collections.emptyList();  
  5.         //创建一个只有一个元素,且不可改变的Set对象  
  6.         Set unmodifiableSet = Collections.singleton("我爱Java");  
  7.         //创建一个普通Map对象  
  8.         Map scores = new HashMap();  
  9.         scores.put("语文"80);  
  10.         scores.put("数学"90);  
  11.         //返回一个普通Map对象对应的不可变版本  
  12.         Map unmodifiableMap = Collections.unmodifiableMap(scores);  
  13.           
  14.         //下面任何一行代码将引发UnsupportedOperationException异常  
  15.         unmodifiableList.add("测试元素");  
  16.         unmodifiableSet.add("测试元素");  
  17.         unmodifiableMap.put("英语"100);  
  18.     }  
  19. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值