• 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。

  • 相关阅读:
    CSS实现商城分类导航效果(hover选择器)
    框架设计读书笔记--扩展点设计--组合法
    框架设计读书笔记--扩展点设计--钩子方法
    Ferris教程学习笔记:js示例2.8 求出数组中所有数字的和
    Ferris教程学习笔记:js示例2.7 点击Div,显示其innerHTML
    Ferris教程学习笔记:js示例2.6 百度输入法
    Ferris教程学习笔记:js示例2.5 记住密码提示框
    Ferris教程学习笔记:js示例2.4 鼠标移入改变样式,鼠标移出恢复
    程序最佳的学习方式
    Ferris教程学习笔记:js示例2.3 用循环将三个DIV变成红色
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10375371.html
Copyright © 2020-2023  润新知