• 第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());

  • 相关阅读:
    对拍源码QwQ
    BZOJ-3875: [Ahoi2014&Jsoi2014]骑士游戏(SPFA+DP)
    2017年10月19日23:31:57
    BZOJ-1064: [Noi2008]假面舞会 (综合性图论题)
    BZOJ-1002: [FJOI2007]轮状病毒(打表找规律or递推 + 高精度)
    BZOJ1397 Ural 1486 Equal squares
    BZOJ3417 Poi2013 Tales of seafaring
    BZOJ2286 [Sdoi2011消耗战
    BZOJ1370 [Baltic2003]Gang团伙
    BZOJ2530 [Poi2011]Party
  • 原文地址:https://www.cnblogs.com/cenyu/p/6149813.html
Copyright © 2020-2023  润新知