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

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

原因:

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

为什么这么设计呢,给出的答案大概是这样:
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(","));
相关推荐
福大大架构师每日一题几秒前
rust 1.99.1 正式更新:聚焦 UEFI、嵌入式、x86_64 FFI 与 macOS 链接体验的三项修复
开发语言·macos·rust
Pin_Qing5 分钟前
缓存能活多久,现在是个要算的参数
java·大数据·开发语言·人工智能·程序人生
小道士写程序5 分钟前
Rust 元组详解:复合类型的基础
开发语言·rust
jyOverQ8 分钟前
从零开始学 RocketMQ(四):集群部署、消息存储与高可用【保姆级教程】
java·rocketmq·java-rocketmq
小裕哥略帅14 分钟前
行级数据权限控制@DataPermission
java·开发语言
ZoeLandia20 分钟前
React05:useEffect 与副作用
开发语言·前端·react.js·typescript
ManageEngineITSM21 分钟前
ITSM系统如何与企业微信、钉钉、飞书集成?提升工单处理效率的方法
java·大数据·开发语言·钉钉·企业微信·变更管理
Akamai中国26 分钟前
PHP 爆出两大高风险漏洞!Akamai 即时部署防护机制
开发语言·人工智能·云计算·云服务
学逆向的26 分钟前
C 悬空指针
c语言·开发语言·网络安全
weixin_4173968336 分钟前
酒店弱电怎么验收?四个阶段与逐项检查清单
开发语言·前端·php·综合布线·弱电