Java中关于 Arrays.asList() 的问题

List list=Arrays.asList(1);
list.add(2);

这两行代码为什么报 UnsupportedOperationException

ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,它是Arrays类自己定义的一个内部类!这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的;
如果你的List只是用来遍历,就用Arrays.asList()吧!如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的添加元素吧!

asList()方法传入的参数应该是一个数组,asList()返回的是arrays类中的私有的终极ArrayList类型,而不是List下的ArrayList ,它有set,get,contains方法,但没有增加和删除元素的方法,所以大小固定,添加元素会报错

http://blog.csdn.net/wangjian5748/article/details/577797

可以看Arrays的源码知道,Arrays.asList()返回的list是Array中实现的内部类,而该类并没有定义add()方法,不仅仅是add()方法没有,
remove()方法同样没有定义。

因为Arrays.asList(1);返回的是固定长的list,所以add操作是不支持的。
需要先构建一个可变长度的数组:
Collection c = new ArrayList(Arrays.asList(la));
c.add(2);

asList()方法传入的参数应该是一个数组,asList()返回的是arrays类中的私有的终极ArrayList类型,而不是List下的ArrayList ,它有set,get,contains方法,但没有增加和删除元素的方法,所以大小固定,添加元素会报错

List是抽象类,它的add直接抛出 throw new UnsupportedOperationException();如果想要实现,需要将ArrayList.asList(l)拆箱成ArrayList就可以用add了

Arrays.asList返回的List不可修改

ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,它是Arrays类自己定义的一个内部类!这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法

Collection c = new ArrayList(Arrays.asList(la));
c.add(2);