Fork me on GitHub

第20章 集合框架(4)-常用集合工具类

集合框架(4)-常用集合工具类

1.Arrays类

在collection接口中有一个方法叫做:toArray,把集合转化为object数组
把集合转化为数组:Object arr = 集合对象.toArray();
数组也可以转化为集合(List集合):
public static<T>List<T>asList(T……a)等价于
public static<T>List<T>asList(T[] a)
示例:

public class TestArrays {

    public static void main(String[] args) {
        //把数组转化为List对象
        List<String> list = Arrays.asList("A","B","C");
        List<Date> list2 = Arrays.asList(new Date(), new Date());
        //list.remove(0);//此处报错
        System.out.println(list);//[A, B, C]
        System.out.println(list2);//[Sun Nov 27 21:27:56 CST 2016, Sun Nov 27 21:27:56 CST 2016]
    }
}


通过Arrays.asList方法得到的List对象的长度是固定的,不能增加,也不能减少,但是可以修改
原因是asList方法返回的ArrayList对象,不是java.util.ArrayList而是Arrays类中的内部类对象。
还有一个奇怪的现象,当先定义一个int[]数组后,把这个数组整体带进去转换出来的结果并不是我们想要的,这个是因为基本数据类型的自动装箱造成的。

public class TestArrays {

    public static void main(String[] args) {
        //把数组转化cv为List对象
        String[] arr = {"A","B","C"};
        List<String> list = Arrays.asList(arr);
        //list.remove(0);//此处报错
        System.out.println(list);//[A, B, C]
        
        
        //自动装箱,把1看成Integer对象,此处有四个对象
        List<Integer> list3 = Arrays.asList(1,2,3,4);
        System.out.println(list3);//[1, 2, 3, 4]

        
        
        //此处会报错,无法转换
        //定义了一个int类型的数组,此处有一个对象
        int[] arr2 = {1,2,3,4};
        //直接把数组当作是对象。
        List<int[]> list4 = Arrays.asList(arr2);
        System.out.println(list4);//[[I@16f6e28]
    }
}

2.Collections类

该类封装了Set,List,Map的操作的工具方法
获取空集对象(没有元素的集合,注意集合不为null)

public class TestCollections {
    public static void main(String[] args) {
        //创建一个新的空List集合,其他的Set,Map是相同的
        List<Object> list1 = Collections.EMPTY_LIST; //常量方法
        List<Object> list2 = Collections.emptyList(); //方法,创建的是不可变的
        List<Object> list3 = new ArrayList<>();//java7开始,方法
    }
}

常用集合类
HashSet/ArrayList/HashMap都是线程安全的,在多线程环境下不安全。
在Collections类中获取线程安全的集合方法
List list = Collections.syhchronizedList(new ArrayList());
当要迭代的时候使用synchronized
synchronized(list){
//TODO
}
其他的也是相同
Set set = Collections.syhchronizedList(new HashSet());

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

posted @ 2016-12-09 15:46  洋葱源码  阅读(273)  评论(0编辑  收藏  举报