zoukankan      html  css  js  c++  java
  • java Arrays.asList() 数组转集合

    主要作用:将数组转化为List

       使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。

    而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数组转为集合。

      错误一

    如果你这样使用过,那你可要注意了。

    将基本类型数组作为asList的参数

    int[] arr = {1,2,3};    
    List list = Arrays.asList(arr);    
    System.out.println(list.size());

    由于Arrays.ArrayList参数为可变长泛型,而基本类型无法泛型化的,所以它把int[] arr数组当成了一个泛型对象,所以集合中最终只有一个元素arr。

     错误二  

    将数组作为asList参数后,修改数组或List

    String[] arr = {"欢迎","关注","Java"};    
    List list = Arrays.asList(arr);    
    arr[1] = "爱上";    
    list.set(2,"");    
    System.out.println(Arrays.toString(arr));    
    System.out.println(list.toString());

     由于asList产生的集合元素是直接引用作为参数的数组,所以当外部数组或集合改变时数组和集合会同步变化,这在平时我们编码时可能产生莫名的问题。

    错误三

    数组转换为集合后,进行增删元素

    String[] arr = {"欢迎","关注","Java"};    
    List list = Arrays.asList(arr);    
    list.add("新增");    
    list.remove("关注");    
    System.out.println(list.toString());

    由于asList产生的集合并没有重写add,remove等方法,所以它会调用父类AbstractList的方法,而父类的方法中抛出的却是异常信息。

    解释:

          其实该方法返回的,不是我们以为的集合 ArrayList, 而是 Arrays的一个静态内部类  java.util.Arrays.ArrayList

    Arrays.ArrayList 是工具类 Arrays 的一个内部静态类,它没有完全实现List的方法,所以不支持add,remove等这些方法

    而正常的ArrayList直接实现了List 接口,实现了List所有方法。

    一些常见的数组转集合的用法

    支持基本类型的方法

    1 如果使用Spring

    int[]  a = {1,2,3};    
    List list = CollectionUtils.arrayToList(a);    
    System.out.println(list);

    2 如果使用Java 8

    int intArray[] = {1, 2, 3};    
    List  iList = Arrays.stream(intArray)    
                                .boxed()    
                                .collect(Collectors.toList());    
    System.out.println(iList);

    数组转ArrayList

    1遍历转换

    Integer intArray[] = {1, 2, 3};    
    ArrayList aList = new ArrayList<    
    for (Integer i: intArray){    
        aList.add(i);    
    }

    显然这种方式不够优雅!反正我不愿意使用。

    2 使用工具类

    上面方案不够优雅,那么这种相对来说优雅一些。

    List list = new ArrayList();     
    Collections.addAll(list, "welcome", "to", "china");

    其实它内部实现机制,也是遍历元素,一个个往集合里加

    3 两个集合类结合

    将Arrays.asList返回的集合作为ArrayList的构造参数

    ArrayList arrayList = new ArrayList(Arrays.asList("welcome", "to", "china"));

    当然此处肯定不能是基本类型的数组了(asList入仓得可以转为泛型),非基本类型都可以

  • 相关阅读:
    C++中static_cast和dynamic_cast强制类型转换
    Oozie-
    Spring Boot- 用idea新建spring boot web项目
    Spring Boot- 设置拦截打印日志
    Storm- 使用Storm实现词频汇总
    Storm- 使用Storm实现累积求和的操作
    HTTP- 头部信息
    Python- 文件读写
    JQuery- JQuery学习
    Javascript- Javascript学习
  • 原文地址:https://www.cnblogs.com/hup666/p/13416911.html
Copyright © 2011-2022 走看看