一、Arrays.asList()的作用
使用Arrays.asList()是想将数组或一些元素转为list,而在这个过程中有许多的小坑需要注意。
asList()的设计刚开始是用于打印数组,从jdk1.5开始,开始使用另一个比较更方便的打印函数Arrays.toString(),而asList()则多用于将数组变为list。
二、错误用法
我们直入主题,下面列出Arrays.asList()容易踩的坑。
2.1 不支持add()、remove()、clear()等方法
如下图源码可知asList()返回的ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList是Arrays自己的静态内部类,该内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。
2.2 该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
如下图源码可知,Arrays.ArrayList参数为可变长泛型,而基本类型是无法泛型化的(泛型要求是对象类型,而基本数据类型在Java中不属于对象。),但是基本数据类型有其封装类且为对象类型,所以可以使用基本数据类型对应的包装类(integer、Character等)。
2.3 该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
如下图Arrays.ArrayList将外部数组的引用直接通过“=”赋予内部的泛型数组,所以本质指向同一个数组。
而ArrayList是将其他集合转为数组后copy到自己内部的数组的。
三、使用场景
如果你的List只是用来遍历,就用Arrays.asList()会更加方便你创建list。
如果你的List还要添加或删除元素,还是老老实实的new一个java.util.ArrayList,然后一个一个的添加元素吧。
四、总结
绿蚁新醅酒,红泥小火炉。晚来天欲雪,能饮一杯无?
才疏学浅,拙文一篇欢迎雅正。