基础数据类型数组转List | ArrayList.asList() 参数的区别

 

今天在将一个int数组转换成List的时候,下意识就写出了如下代码

int[] data2 = {1,2,3,4};
Arrays.asList(data2);


但是我在用代码补全的时候,发现接受参数是List<int[]>,也就是
List<int[]> ints1 = Arrays.asList(data2);

按照我的预想,我应该得到的是一个List<Integer>的数组?


于是我测试了如下代码:

    public static void main(String[] args) {
        Solution solution = new Solution();
        Integer[] data = new Integer[]{1,2,3,4,5};
        List<Integer> list = Arrays.asList(data);

        int[] data2 = {1,2,3,4};
        List<int[]> ints1 = Arrays.asList(data2);
        System.out.println(ints1.size());


        String[] str = {"fgx", "lzy"};
        List<String> strings = Arrays.asList(str);
        System.out.println(strings.size());
    }

 

asList()的源码如下:

    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

 

仔细观察可以发现asList接受的参数是一个泛型的变长参数,而基本数据类型是无法泛型化的,对于基本数据类型的数组,会将其作为一个对象,而对对象数组,会得到想要的结果。

上面就是因为把int类型的数组当参数了,所以转换后的列表就只包含一个int[]元素

 

 

正确方法如下:

public static void main(String[] args) {

        int[] data2 = {1,2,3,4};
        // 使用guava工具包
        List<Integer> t = Ints.asList(data2);
        // 通过JDK8的Stream流将3总基本类型数组转为List
        List<Integer> collect = Arrays.stream(data2).boxed().collect(Collectors.toList());

    }

 

posted @ 2023-02-15 10:19  r1-12king  阅读(31)  评论(0编辑  收藏  举报