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

这是因为 Arrays.asList 返回的 Arrays$ArrayList 只是原始数组的视图。因此,当原始数组更改时,视图也会更改。

如果使用真正的 ArrayList,则将复制元素,并且原始数组的更改不会影响 ArrayList。

这样做的原因很简单:

性能:无需复制任何内容
内存效率高:不需要第二个数组

在这里插入图片描述

解决方法:

(1)

List<String> list = new ArrayList<>(Arrays.asList(virchildren.split(",")));

(2)

List<String> list = new ArrayList<>();
Collections.addAll(list, virchildren.split(","));
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值