[英]remove() on List created by Arrays.asList() throws UnsupportedOperationException
我有一个集合c1<MyClass>
和一个数组a<MyClass>
。 我正在尝试将数组转换为集合c2
并执行c1.removeAll(c2)
,但这会引发UnsupportedOperationException
。 我发现 Arrays 类的asList()
返回Arrays.ArrayList
类,这个类继承了AbstractList()
的removeAll()
,其实现抛出UnsupportedOperationException
。
Myclass la[] = getMyClass();
Collection c = Arrays.asList(la);
c.removeAll(thisAllreadyExistingMyClass);
有没有办法去除元素? 请帮忙
Arrays.asList
返回一个围绕数组的List
包装器。 此包装器具有固定大小并由数组直接支持,因此对set
调用将修改数组,而任何其他修改列表的方法都将抛出UnsupportedOperationException
。
要解决此问题,您必须通过复制包装器列表的内容来创建一个新的可修改列表。 使用带有Collection
的ArrayList
构造函数很容易做到这一点:
Collection c = new ArrayList(Arrays.asList(la));
是的, Arrays.asList(..)
是不能扩展或收缩的集合(因为它由原始数组支持,并且不能调整大小)。
如果要删除元素,请创建一个new ArrayList(Arrays.asList(..)
或直接从数组中删除元素(这会降低效率且难以编写)
这就是Array.asList()
工作方式,因为它直接由数组支持。 要获得完全可修改的列表,您必须将集合克隆到您自己创建的集合中。
Collection c = new ArrayList(Arrays.asList(la))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.