当前位置 博文首页 > whing123的博客:Java Arrays.asList 数组转list

    whing123的博客:Java Arrays.asList 数组转list

    作者:[db:作者] 时间:2021-08-02 12:38

    String s[] = {"aa","bb","cc"};  
    List<String> sList = Arrays.asList(s);  
    for(String str:sList){ // 能遍历出各个元素  
        System.out.println(str);  
    }  
    System.out.println(sList.size()); // 为3  
    
    int i[] = {11,22,33};  
    List intList = Arrays.asList(i); // intList中就一个Integer数组类型的对象,整个数组作为一个元素存进去的  
    for(Object o : intList){ // 就一个元素  
        System.out.println(o.toString());  
    }  
    
    Integer ob[]={11,22,33};  
    List<Integer> objList = Arrays.asList(ob); // 数组里的每一个元素都是作为list中的一个元素  
    for(int a:objList){  
        System.out.println(a);  
    }  
    
    /*
    aa  
    bb  
    cc  
    3  
    - - - - - - - - - - -  
    [I@287efdd8  
    - - - - - - - - - - -  
    11  
    22  
    33  
    */

    Arrays.asList(),将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部类Arrays.ArrayList,用这个对象对列表进行添加删除操作,就会抛出UnsupportedOperationException异常,因为在Arrays.ArrayList内部中,仍是一个定长数组。

    // Arrays.ArrayList内部类中:
    
    private final E[] a;
    
    ArrayList(E[] array) {
        a = Objects.requireNonNull(array);
    }
    // asList()
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

    • 如果想根据数组得到一个新的 正常的 list,可以循环一个一个添加,也可以:
    // 方法1
    // java.util.ArrayList
    ArrayList<Integer> copyArr = new ArrayList<Integer>(Arrays.asList(ob)); //这样就得到一个新的list,可对其进行add,remove了  
    copyArr.add(222); // 正常,不会报错
    // 方法2
    ArrayList<Integer> copyArr = new ArrayList<Integer>(5);
    Collections.addAll(copyArr, ob); // 或者新建一个空的list,把要转换的数组用Collections.addAll添加进去
    • 如果想将基本类型的数组如int[], long[]用asList转成list,那么我们可以选择用apache commons-lang工具包里的数组工具类ArrayUtils类的toObject()方法,非常方便,如下:
    Arrays.asList(ArrayUtils.toObject(i)); // 上边的代码:int i[]={11,22,33}; 达到了想要的效果  

    这里写图片描述


    转自:Java我人生(陈磊兴)http://blog.csdn.net/chenleixing/article/details/43775127

    cs