我有一个集合c1<MyClass>和一个数组a<MyClass>。我试图将数组转换为集合c2并执行操作c1.removeAll(c2),但这会抛出异常UnsupportedOperationException。我发现,asList()Arrays类收益Arrays.ArrayList类和这个类继承removeAll()自AbstractList()其实现抛出UnsupportedOperationException。 Myclass la[] = getMyClass(); Collection c = Arrays.asList(la); c.removeAll(thisAllreadyExistingMyClass);有什么办法可以删除元素?请帮忙
3 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
Arrays.asList返回List数组的包装器。此包装具有固定的大小,并直接由数组支持,因此对的调用set将修改数组,而其他任何修改列表的方法都将引发UnsupportedOperationException。
要解决此问题,您必须通过复制包装器列表的内容来创建新的可修改列表。通过使用ArrayList带有的构造函数,这很容易做到Collection:
Collection c = new ArrayList(Arrays.asList(la));
冉冉说
TA贡献1877条经验 获得超1个赞
Arrays.asList(..)是的,不能扩展或缩小的is集合(因为它由原始数组支持,并且无法调整大小)。
如果要删除元素,请创建一个new ArrayList(Arrays.asList(..)或直接从数组中删除元素(这样效率较低且更难编写)
四季花海
TA贡献1811条经验 获得超5个赞
这是可行的方法Array.asList(),因为它直接由数组支持。要获得完全可修改的列表,您必须将集合克隆到您自己创建的集合中。
Collection c = new ArrayList(Arrays.asList(la))
添加回答
举报
0/150
提交
取消