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(","));
相关推荐
麦兜*14 分钟前
Spring Boot集成方案 + Elasticsearch向量检索,语义搜索核弹
java·spring boot·python·spring·elasticsearch·spring cloud·系统架构
歪歪10019 分钟前
HTML 如何转 Markdown
开发语言·chrome·python·程序人生·html
Absinthe_苦艾酒40 分钟前
JVM学习专题(四)对象创建过程
java·jvm·后端
小坏坏的大世界44 分钟前
C++中多线程和互斥锁的基本使用
开发语言·c++
路由侠内网穿透1 小时前
本地部署 SQLite 数据库管理工具 SQLite Browser ( Web ) 并实现外部访问
运维·服务器·开发语言·前端·数据库·sqlite
王者鳜錸1 小时前
PYTHON从入门到实践-18Django模版渲染
开发语言·python·django
Hard but lovely1 小时前
C++ STL--> vector的模拟实现!
开发语言·c++
程序员奈斯1 小时前
苍穹外卖Day10
java
CodeHackerBhx2 小时前
Jenkins
java·运维·jenkins
忘忧人生2 小时前
docker 容器常用命令
java·docker·容器