您的位置:首页 > 其它

操作集合的工具类:Collections

2015-11-29 12:58 429 查看
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
plaincopy

public class TestSort {  

  

    public static void main(String[] args) {  

        ArrayList nums = new ArrayList();  

        nums.add(2);  

        nums.add(-5);  

        nums.add(3);  

        nums.add(0);  

        System.out.println(nums);  

        //输出[2, -5, 3, 0]  

          

        //将List集合元素的次序反转  

        Collections.reverse(nums);  

        System.out.println(nums);  

        //输出[0, 3, -5, 2]  

          

        //将List集合元素按自然顺序排序  

        Collections.sort(nums);  

        System.out.println(nums);  

        //输出[-5, 0, 2, 3]  

          

        //将List按照集合元素的按随机顺序排序  

        Collections.shuffle(nums);  

        System.out.println(nums);  

        //输出[2, 0, -5, 3]  

          

    }  

}  


查找,替换操作

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
plaincopy

public class TestSynchronized {  

    public static void main(String[] args) {  

        //下面程序创建了四个同步的集合对象  

        Collection c = Collections.synchronizedCollection(new ArrayList());  

        List list = Collections.synchronizedList(new ArrayList());  

        Set set = Collections.synchronizedSet(new HashSet());  

        Map map = Collections.synchronizedMap(new HashMap());  

    }  

}  

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


设置不可变集合

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

[java] view
plaincopy

public class TestUnmodifiable {  

    public static void main(String[] args) {  

        //创建一个空的不可改变的List对象  

        List unmodifiableList = Collections.emptyList();  

        //创建一个只有一个元素,且不可改变的Set对象  

        Set unmodifiableSet = Collections.singleton("我爱Java");  

        //创建一个普通Map对象  

        Map scores = new HashMap();  

        scores.put("语文", 80);  

        scores.put("数学", 90);  

        //返回一个普通Map对象对应的不可变版本  

        Map unmodifiableMap = Collections.unmodifiableMap(scores);  

          

        //下面任何一行代码将引发UnsupportedOperationException异常  

        unmodifiableList.add("测试元素");  

        unmodifiableSet.add("测试元素");  

        unmodifiableMap.put("英语", 100);  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: