为了账号安全,请及时绑定邮箱和手机立即绑定

Arrays.asList()创建的列表上的remove()抛出Unsupported

Arrays.asList()创建的列表上的remove()抛出Unsupported

呼如林 2019-10-19 14:35:36
我有一个集合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));


查看完整回答
反对 回复 2019-10-19
?
冉冉说

TA贡献1877条经验 获得超1个赞

Arrays.asList(..)是的,不能扩展或缩小的is集合(因为它由原始数组支持,并且无法调整大小)。


如果要删除元素,请创建一个new ArrayList(Arrays.asList(..)或直接从数组中删除元素(这样效率较低且更难编写)


查看完整回答
反对 回复 2019-10-19
?
四季花海

TA贡献1811条经验 获得超5个赞

这是可行的方法Array.asList(),因为它直接由数组支持。要获得完全可修改的列表,您必须将集合克隆到您自己创建的集合中。


Collection c = new ArrayList(Arrays.asList(la))


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 450 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信