Arrays.asList作用

184 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

Arrays.asList作用

  • 今天遇到了一个大坑,特此记录一下

  • 首先 Arrays.asList作用就是转换成数组,那么自然就需要被转换对象一开始就是数组结构或者数组形式的,这样才能够正常转换。

  • 另外值得注意的是 Arrays.asList转换的数组返回对象是java.util.Arrays的内部类。我们不能像对待正常集合一样去操作它,比如说去修改删除它这些操作都是不允许的。第一点是内部类ArraysList,第二点是a数组被final修饰,返回了ArrayList这个内部类,因此用Arrays.asList()将数组转换成list集合,获得的List是不能动态修改的,否则报错 java.lang.UnsupportedOperationException

使用

String[] reports = reportStr.split(",");

List<String> list = Arrays.asList(reports);

  • 就像这样我们就看是互相转换。这种方式得到的list集合可以增加删除集合中元素;

report数组内容改变,list集合不会跟着改变。

进阶

  • 数组转Java中的List并不是只有这一种方法,我们还可以通过在初始化时填充内容。
List<String> testList = new ArrayList<String>(){{add("aa");add("bb");add("cc");}};

进阶2

为什么这里array转List后,修改array,list也会变化呢? asList返回的确实是个ArrayList,但是这个并不是我们通常使用的java.util.ArrayList,它是Arrays类的静态内部类,是比较简单粗糙的类: 1、没有扩容机制 2、无法添加元素,调用add(E element)会抛异常 最根本的原因是这个内部类的E[] a是final的

进阶3

  • 数组转list之后会设计到线程不安全等问题,解决办法就是我们手动加锁

总结

1,该方法适用于对象型数据的数组(String、Integer…)

2,该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)

3,该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新

4,不支持add()、remove()、clear()等方法