java.util.AbstractList.remove(未知来源)中的java.lang.UnsupportedOperationException

Dee*_*kar 45 java arrays collections exception

我试过下面的代码

String s[]={"1","2","3","4"};  
Collection c=Arrays.asList(s);  
System.out.println(c.remove("1") +"  remove flag");  

System.out.println(" collcetion "+c);  
Run Code Online (Sandbox Code Playgroud)

我得到了

Exception in thread "main" java.lang.UnsupportedOperationException  
at java.util.AbstractList.remove(Unknown Source)  
at java.util.AbstractList$Itr.remove(Unknown Source)  
at java.util.AbstractCollection.remove(Unknown Source)  
at test.main(test.java:26)  
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?

Boj*_*vic 31

简单的解决方法就是将List传递给一个ArrayList构造函数.

例如:

String valuesInArray[]={"1","2","3","4"};  
List modifiableList = new ArrayList(Arrays.asList(valuesInArray));
System.out.println(modifiableList.remove("1") + "  remove flag");  
System.out.println(" collcetion "+ modifiableList); 

响应:

真正删除标志

collcetion [2,3,4]


Sea*_*oyd 26

轻微纠正:不,它不是一个不可修改的集合.它只是不支持添加和删除元素,因为它由提供的数组支持,并且数组不可调整大小.但它支持像这样的操作list.set(index, element)

  • @Michel的大部分工作都是由java.util.AbstractList完成的,但是所有可选方法都抛出UnsupportedOperationException.像ArrayList这样的公共实现会覆盖这些无操作方法,但是`Arrays.asList(...)`使用的内部实现`Collections $ Arraylist`不会覆盖add方法.(但它确实覆盖了上面提到的set方法) (3认同)

小智 8

Arrays.asList类方法返回的Listjava.util.Arrays是一个固定大小的列表对象,这意味着不能向列表中添加或删除元素。

因此,诸如添加或删除之类的功能无法在此类列表上进行操作。

添加或删除而不获取的解决方案java.lang.UnsupportedOperationException是 ->

List<String> strList= new ArrayList<>(Arrays.asList(strs));

//Then Add or Remove can be called on such List

newList.add("100");
newList.remove("100");

Run Code Online (Sandbox Code Playgroud)


Ant*_*ida 5

我遇到了这个问题,因为我也在用以下方法初始化列表Arrays.asList

List<String> names = Arrays.asList("a", "b", "c");
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我addAll改用:

List<String> names = new ArrayList<String>();
names.addAll(Arrays.asList("a", "b", "c"));
Run Code Online (Sandbox Code Playgroud)

这样,您可以编辑列表,添加新项目或删除。