Arrays.asList()方法调用add()或remove()抛出java.lang.UnsupportedOperationException问题

在使用Arrays.asList方法将以,分割的字符串转为list集合时,调用add和remove等方法时会抛出java.lang.UnsupportedOperationException。以下为原因和解决方法。

原因:

Arrays.asList()方法返回了一个Arrays类的一个继承了AbstractList的ArrayList内部类,此内部类没有重写addremove等一些常用的方法,所以抛出异常。

为什么这么设计呢,给出的答案大概是这样:
https://stackoverflow.com/questions/4658867/why-does-arrays-aslist-return-its-own-arraylist-implementation

java 复制代码
这是因为 Arrays.asList 返回的 Arrays$ArrayList 只是原始数组的视图。因此,当原始数组更改时,视图也会更改。

如果使用真正的 ArrayList,则将复制元素,并且原始数组的更改不会影响 ArrayList。

这样做的原因很简单:

性能:无需复制任何内容
内存效率高:不需要第二个数组

解决方法:

(1)

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList(virchildren.split(",")));

(2)

java 复制代码
List<String> list = new ArrayList<>();
Collections.addAll(list, virchildren.split(","));
相关推荐
cainiao080605几秒前
Java 大视界——Java 大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
java·大数据·开发语言
瑞雪兆丰年兮5 分钟前
数学实验(Matlab符号运算)
开发语言·算法·matlab·数学实验
chxii7 分钟前
6.2字节流
java·开发语言
不务专业的程序员--阿飞16 分钟前
【SQL 如何解锁递归】
java·数据库·sql
嘵奇22 分钟前
Spring Boot拦截器详解:原理、实现与应用场景
java·spring boot·后端
八股文领域大手子23 分钟前
Java死锁排查:线上救火实战指南
java·开发语言·面试
点云SLAM27 分钟前
Python中列表(list)知识详解(2)和注意事项以及应用示例
开发语言·人工智能·python·python学习·数据结果·list数据结果
国强_dev28 分钟前
任意复杂度的 JSON 数据转换为多个结构化的 Pandas DataFrame 表格
开发语言·python
jackson凌29 分钟前
【Java学习笔记】finalize方法
java·笔记·学习
fanTuanye33 分钟前
redis 缓存穿透,缓存击穿,缓存雪崩
java·redis·缓存