我有一个集合c1<MyClass>
和一个数组a<MyClass>
.我试图将数组转换为集合c2
并做c1.removeAll(c2)
,但这引发了UnsupportedOperationException
.我发现asList()
Arrays类返回了Arrays.ArrayList
类,并且该类继承了其实现抛出的removeAll()
from .AbstractList()
UnsupportedOperationException
Myclass la[] = getMyClass();
Collection c = Arrays.asList(la);
c.removeAll(thisAllreadyExistingMyClass);
Run Code Online (Sandbox Code Playgroud)
有没有办法删除元素?请帮忙
Eti*_*tel 161
Arrays.asList
返回List
数组的包装器.这个包装器有一个固定的大小,并由数组直接支持,因此调用set
将修改数组,修改列表的任何其他方法将抛出UnsupportedOperationException
.
要解决此问题,您必须通过复制包装列表的内容来创建新的可修改列表.使用ArrayList
构造函数很容易做到Collection
:
Collection c = new ArrayList(Arrays.asList(la));
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 13
Arrays.asList(..)
是的,是无法扩展或缩小的集合(因为它由原始数组支持,并且无法调整大小).
如果要new ArrayList(Arrays.asList(..)
删除元素,请直接从数组创建或删除元素(效率较低,写入较难)
这是可行的方式Array.asList()
,因为它直接由数组支持.要获得完全可修改的列表,您必须将集合克隆到由您自己创建的集合中.
Collection c = new ArrayList(Arrays.asList(la))
Run Code Online (Sandbox Code Playgroud)