由Arrays.asList()创build的List上的remove()抛出UnsupportedOperationException
我有一个集合c1<MyClass>
和一个数组a<MyClass>
。 我试图将数组转换为集合c2
并做c1.removeAll(c2)
,但是这会抛出UnsupportedOperationException
。 我发现Arrays类的asList()
返回Arrays.ArrayList
类,这个类从AbstractList()
inheritanceremoveAll()
,它的实现抛出UnsupportedOperationException
exception。
Myclass la[] = getMyClass(); Collection c = Arrays.asList(la); c.removeAll(thisAllreadyExistingMyClass);
有什么办法去除元素? 请帮忙
Arrays.asList
返回一个数组的List
包装。 这个包装器有一个固定的大小,并直接支持数组,因为这样的调用将修改数组,任何其他修改列表的方法将抛出一个UnsupportedOperationException
。
要解决这个问题,你必须通过复制包装器列表的内容来创build一个新的可修改列表。 使用带Collection
的ArrayList
构造函数很容易:
Collection c = new ArrayList(Arrays.asList(la));
是的, Arrays.asList(..)
是不能扩展或缩小的集合(因为它是由原始数组支持的,并且不能resize)。
如果你想删除元素,可以创build一个new ArrayList(Arrays.asList(..)
或直接从数组中删除元素(这将是更低效率和更难写)
这就是Array.asList()
工作方式,因为它直接支持数组。 要获得完全可修改的列表,您必须将集合克隆到您自己创build的集合中。
Collection c = new ArrayList(Arrays.asList(la))