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(","));
相关推荐
g***55758 小时前
Java高级开发进阶教程之系列
java·开发语言
鲁正杰8 小时前
【运维部署】现代化内网穿透与文件共享方案 (Rust)
运维·开发语言·rust
阿达King哥8 小时前
在Windows11下编译openjdk 21
java·jvm
shark-chili8 小时前
从操作系统底层浅谈程序栈的高效性
java
2401_876907529 小时前
USB TYPE-C 公头连接器设计规范总结:提升可靠性、降本增效的关键指南
c语言·开发语言·设计规范
额呃呃9 小时前
std::allocator<T>::destroy
开发语言
不知疲倦的仄仄9 小时前
第二天:深入理解 Selector:单线程高效管理多个 Channel
java·nio
期待のcode9 小时前
Java虚拟机栈
java·开发语言·jvm
珂朵莉MM9 小时前
全球校园人工智能算法精英大赛-产业命题赛-算法巅峰赛 2025年度画像
java·人工智能·算法·机器人
芒克芒克9 小时前
本地部署SpringBoot项目
java·spring boot·spring