Arrays.asList方法可以将数组转化为List,但在使用过程中需要注意一些问题。
1.发现问题
首先看一个示例:
输出结果有个奇怪的地方,就是第三个例子,这个整型数组明明有5个值,但用Arrays.asList后,大小仅为1。调试一下,看一看这个list的内容:
发现它把整个数组当做成一个值放入了list中。
接下来尝试用其他类型:
到这里,猜想是基本类型都会这样,只有包装类型符合预期效果。
2.查看源码
点进去看asList方法:
1 | public static <T> List<T> asList(T... a) { |
首先它是一个静态方法,ArrayList也明显不是常用的那个ArrayList,其实到这就已经出答案了,基本类型不可以泛型化。然而下一行就是这个ArrayList的定义方法,顺眼看一下:
1 | private static class ArrayList<E> extends AbstractList<E> |
final修饰符说明了当new出这个ArrayList的时候,已经不可以修改了。
再看看它的父类AbstractList,里面有add方法:
1 | public boolean add(E e) { |
显然,在调用add的时候,直接就会抛出异常:
3.小结
- 基本类型数组不能用Arrays.asList
- 用Arrays.asList生成的list不支持修改
那么,回到开始的示例,怎么把整型的基本类型数组转化为list呢?for遍历?当然可以,还可以这样:
1 | List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList()); //jdk8以上 |