先看一段代码:
List list1 = new ArrayList();
list1.add("test");
String[] array = new String[2];
List list2 = Arrays.asList(array);
list2.add("test");//抛出异常
为什么会是这样呢?
上面的代码list1是在正常的创建list,可以增删内容
list2是通过数组的aslist方法获得的,是一个固定大小的list,不允许进行添加
我猜测Arrays.asList返回的List内容是Array的内容引用。若可以在List中修改,那么怎么同步呢?因为它们有一个本质的区别Array不能自动增大,若允许在List随便增大,则与其相应的Array的内容怎么保证不可修改呢?他们之间有一个阻抗。最后权衡一下,只能让Arrays.asList返回的List不可修改,或者让返回的List与Array之间没有关系,若这样的话,对于那些很大数组来说性能上就会很有影响。