zoukankan      html  css  js  c++  java
  • Java -- Arrays.asList()方法

    Arrays.asList() 是将数组作为列表

    问题来源于:

    public class Test {
        public static void main(String[] args) {
            int[] a = {1,2,3,4};
            List list = Arrays.asList(a);
            System.out.println(list.size());  //1
        }
    }

    期望的输出是 list里面也有4个元素,也就是size为4,然而结果是1.

    原因如下:

    在Arrays.asList中,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以a变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1,相当于是List中数组的个数。基本类型是不能作为泛型的参数,按道理应该使用包装类型,但这里缺没有报错,因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组

    /**
         * Returns a fixed-size list backed by the specified array.  (Changes to
         * the returned list "write through" to the array.)  This method acts
         * as bridge between array-based and collection-based APIs, in
         * combination with {@link Collection#toArray}.  The returned list is
         * serializable and implements {@link RandomAccess}.
         *
         * <p>This method also provides a convenient way to create a fixed-size
         * list initialized to contain several elements:
         * <pre>
         *     List&lt;String&gt; stooges = Arrays.asList("Larry", "Moe", "Curly");
         * </pre>
         *
         * @param a the array by which the list will be backed
         * @return a list view of the specified array
         */
        @SafeVarargs
        public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);
        }

    返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。)此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的.

    所以,如果是创建多个列表,在传参数时候,最好使用Arrays.copyOf(a)方法,不然,对列表的更改就相当于对数组的更改。

    public class Test {
        public static void main(String[] args) {
            Integer[] a = {1,2,3,4};
            List list = Arrays.asList(a);
            System.out.println(list.size());  //4
        }
    }

    最后提醒,如果Integer[]数组没有赋值的话,默认是null,而不是像int[]数组默认是0。

    原文: http://www.cnblogs.com/tina-smile/p/5056174.html

  • 相关阅读:
    java-第二周学习总结
    春季总结
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    网络层思维导图
    数据链路层思维导图
    Mysql数据库的基本操作之建表操作(2)
  • 原文地址:https://www.cnblogs.com/zheting/p/7670201.html
Copyright © 2011-2022 走看看