本文主要是介绍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
这是因为 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(","));
这篇关于Arrays.asList()方法调用add()或remove()抛出java.lang.UnsupportedOperationException问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!