美文网首页程序员
理解5:Arrays.asList

理解5:Arrays.asList

作者: 小蜜蜂_Jade | 来源:发表于2020-06-17 11:44 被阅读0次

一、what

将数组或一些元素转为集合

二、错误用法

  1. 将基本类型参数作为aslist的参数
        int[] arr = {1, 2, 3};
        List list = Arrays.asList(arr);
        System.out.println(list.size());   //1
//原因:由于Arrays.ArrayList参数为可变长泛型,而基本类型是无法泛型化的,所以它把int[] arr数组当成了一个泛型对象,所以集合中最终只有一个元素arr。
  1. 将数组作为asList参数后,修改数组或List
String[] strings = {"你好", "世界"};
List list = Arrays.asList(strings);
strings[0] = "你不好";
list.set(1, "yufchen");
System.out.println(Arrays.toString(strings) + list.toString());
//[你不好, yufchen][你不好, yufchen]
//由于asList产生的集合元素是直接引用作为参数的数组,所以当外部数组或集合改变时,数组和集合会同步变化

3. 数组转换为集合后,进行增删元素
list.add("新增的话");//java.lang.UnsupportedOperationException
//由于asList产生的集合并没有重写add,remove等方法,所以它会调用父类AbstractList的方法,而父类的方法中抛出的却是异常信息。

三、真相

List list = Arrays.asList(strings);
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(strings));
DEBUG看类型.png
继承区别.png
  • 长度不同 和 实现的方法不同
    Arrays.ArrayList是一个定长集合,因为它没有重写add,remove方法,所以一旦初始化元素后,集合的size就是不可变的。
  • 参数赋值方式不同
    Arrays.ArrayList将外部数组的引用直接通过 “=” 赋予内部的泛型数组,所以本质指向同一个数组。
    ArrayList是将其他集合转为数组后copy到自己内部的数组的。

四、数组转ArrayList方式

两种方式.png
//既可以用于基本类型也可以返回想要的集合。
int intArray[] = {1, 2, 3};
List<Integer> arraylist = Arrays.stream(intArray)
        .boxed()
        .collect(Collectors.toList());
System.out.println(arraylist);

相关文章

网友评论

    本文标题:理解5:Arrays.asList

    本文链接:https://www.haomeiwen.com/subject/ewijxktx.html