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

我有一个集合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);

有什么办法可以删除元素?请帮忙


呼如林
浏览 451回答 3
3回答

繁花不似锦

Arrays.asList返回List数组的包装器。此包装具有固定的大小,并直接由数组支持,因此对的调用set将修改数组,而其他任何修改列表的方法都将引发UnsupportedOperationException。要解决此问题,您必须通过复制包装器列表的内容来创建新的可修改列表。通过使用ArrayList带有的构造函数,这很容易做到Collection:Collection c = new ArrayList(Arrays.asList(la));

冉冉说

Arrays.asList(..)是的,不能扩展或缩小的is集合(因为它由原始数组支持,并且无法调整大小)。如果要删除元素,请创建一个new ArrayList(Arrays.asList(..)或直接从数组中删除元素(这样效率较低且更难编写)

四季花海

这是可行的方法Array.asList(),因为它直接由数组支持。要获得完全可修改的列表,您必须将集合克隆到您自己创建的集合中。Collection c = new ArrayList(Arrays.asList(la))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java