openshell 的个人博客

一天很长,但十年很短。

Open Source, Open Mind,
Open Sight, Open Future!
  menu
114 文章
5051 浏览
1 当前访客
ღゝ◡╹)ノ❤️

List使用addAll()报错:UnsupportedOperationException

事情大概是这个样子:

        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