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(","));
相关推荐
渣哥4 小时前
ConcurrentHashMap 的 get 要不要加锁?一次“多此一举”的心路历程
java
星哥说事5 小时前
Python自学12 — 函数和模块
开发语言·python
愿你天黑有灯下雨有伞5 小时前
一种基于注解与AOP的Spring Boot接口限流防刷方案
java·spring boot·后端
MuMuMu#5 小时前
JAVA NIO学习笔记基础强化学习总结
java·学习·nio
拾忆,想起5 小时前
Redis复制延迟全解析:从毫秒到秒级的优化实战指南
java·开发语言·数据库·redis·后端·缓存·性能优化
我登哥MVP5 小时前
Java File 类学习笔记
java·笔记·学习
掘根5 小时前
【CMake】缓存变量
java·后端·spring
西京刀客5 小时前
macos安装openjdk17
java·macos·java17
点云侠6 小时前
解决Visual Studio 2022编译工程速度慢的问题
开发语言·c++·ide·算法·计算机视觉·visual studio
Java中文社群6 小时前
面试官:如何实现动态线程池的任务编排?
java·后端·面试