事情大概是这个样子:
String[] str={"A","B","C"};
List<String> list = Arrays.asList(str);
list.add("d");
运行之后就会抛出UnsupportedOperationException
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.cqz.study.collection.CollectionStudy.main(CollectionStudy.java:19)
这是由于 Arrays.asList()返回的是一个只读的 List,所有使用 add 及 remove 方法都会抛出 UnsupportedOperationException
。
List接口
List接口继承自Collection,比较典型的实现有ArrayList()
、LinkendList()
等。List的行为和数组几乎完全相同,元素按照顺序存放,可以根据索引确定索引的位置。
ArrayList读取、追加元素比LinkendList快,且内存占用相对少,但是在指定位置插入元素较慢。在ArrayList的指定位置插入元素,若数组空间足够,则自动移动元素,若空间不够,则新建比原先大一倍的数组,复制旧数据后再新增元素。
LinkendList追加或者增加元素都很快,因为它是利用链表连接数据,不需要在内存中连续的存储,但它读书元素较慢,得从头开始遍历。
标题:List使用addAll()报错:UnsupportedOperationException
作者:openshell
地址:http://solo.caiqz.cn/articles/2020/04/27/1587979403132.html