阿里巴巴 Java 开发手册:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法

参考链接:http://blog.csdn.net/WuZuoDingFeng/article/details/56017417

page10/34

引用:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。 

理解:

先看看Arrays.ArrayList的元素存储区的声明:

private final E[] a;
而java.util.ArrayList的存储区是这样声明的:

transient Object[] elementData;

这么一对比,李鬼假的简直太粗暴了,连一个优雅的名字都不舍得想。从声明上可以看出Arrays.ArrayList中的元素存储数组是一个不可变的数组引用,由于数组的长度本身是不可变的,所以Arrays.ArrayList从元素存储上就不支持长度变化,那么肯定是不允许add和remove操作了,所以在该类中就未对add和remove进行实现,直接调用了父类AbstractList中声明的方法:
正确使用方式:

String[] strings = new String[]{"hello","world"};
List stringList = new ArrayList(Arrays.asList(strings));
stringList.add("java");



你可能感兴趣的:(java)