繁体   English   中英

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

[英]remove() on List created by Arrays.asList() throws UnsupportedOperationException

我有一个集合c1<MyClass>和一个数组a<MyClass> 我正在尝试将数组转换为集合c2并执行c1.removeAll(c2) ,但这会引发UnsupportedOperationException 我发现 Arrays 类的asList()返回Arrays.ArrayList类,这个类继承了AbstractList()removeAll() ,其实现抛出UnsupportedOperationException

    Myclass la[] = getMyClass();
    Collection c = Arrays.asList(la);
    c.removeAll(thisAllreadyExistingMyClass);

有没有办法去除元素? 请帮忙

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM