大概的描述:Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。
Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。
详细解答:
示例代码:
List list = new ArrayList();
list.add("test1");
String[] array = new String[2];
List arrayToList = Arrays.asList(array);
List newArray = new ArrayList(arrayToList);
newArray.add("test2");
array[0] = "test3";
System.out.println(arrayToList.get(0));
arrayToList.add("test");//抛出异常‘
arrayToList.remove(arrayTolist(0));
在执行到arrayToList.add("test2")时抛出如下异常:java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:151)
at java.util.AbstractList.add(AbstractList.java:89)
at TesException.main(TesException.java:20)
Arrays.asList返回的List内容是Array的内容引用。因为Array不能自动增大,若允许在List随便增大,那么Array的内容就不能同步最后只能让Arrays.asList返回的List不可修改,或者让返回的List与Array之间没有关系,若这样的话,对于那些很大数组来说性能上就会很有影响。
总结来说:newArray和arrayToList都是听array的摆布,然后arrayToList只是将array化了个妆,没有啥扩展功能; list对象才是拥有强大的List基因,功能强大。