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(","));
相关推荐
无小道几秒前
Qt——常用控件
开发语言·qt
Maynor99617 分钟前
OpenClaw 玩家必备:用 AI 自动追踪社区最新动态
java·服务器·人工智能
aini_lovee18 分钟前
MATLAB基于小波技术的图像融合实现
开发语言·人工智能·matlab
堕27422 分钟前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
R1nG86331 分钟前
多线程安全设计 CANN Runtime关键数据结构的锁优化
开发语言·cann
初次见面我叫泰隆31 分钟前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
亓才孓36 分钟前
[Class的应用]获取类的信息
java·开发语言
开开心心就好44 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
Never_Satisfied1 小时前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
80530单词突击赢1 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端