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

时间:2011-09-13 09:18:06

标签: java arrays exception collections

我试过下面的代码

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

System.out.println(" collcetion "+c);  

我得到了

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)  

有人可以帮我解决这个问题吗?

5 个答案:

答案 0 :(得分:30)

简单的解决方法就是将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); 

响应:

  

true remove flag

     

collcetion [2,3,4]

答案 1 :(得分:26)

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

等操作

答案 2 :(得分:3)

我遇到了这个问题,因为我还在使用Arrays.asList初始化我的列表:

List<String> names = Arrays.asList("a", "b", "c");

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

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

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

答案 3 :(得分:0)

Arrays.asList类的java.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");

答案 4 :(得分:0)

一个内衬修补程序是这样声明您的列表:

List<Integer> list2 = new ArrayList<>(Arrays.asList(0,8,1,5,7,0));