一尘不染

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

java

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

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


阅读 344

收藏
2020-03-19

共1个答案

一尘不染

Arrays.asList返回List数组的包装器。此包装具有固定的大小,并直接由数组支持,因此对的调用set将修改数组,而修改列表的任何其他方法都将引发UnsupportedOperationException

要解决此问题,你必须通过复制包装器列表的内容来创建新的可修改列表。通过使用ArrayList带有的构造函数,这很容易做到Collection:

Collection c = new ArrayList(Arrays.asList(la));
2020-03-19