2011-09-13 38 views
30

我曾尝试下面的代码java.lang.UnsupportedOperationException在java.util.AbstractList.remove(来源不明)

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) 

谁能帮我解决这个问题?

+2

什么问题? –

+4

这是一个博客条目吗? – Jacob

+0

所以你知道答案吗? – Bajji

回答

18

简单的解决方法就是将列表传递给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]

+0

鉴于'List.remove()'操作需要一个索引,我认为应该是'modifiableList.remove(0)'。 –

+1

嘿@NickMaynard,它可以与索引一起使用:https://docs.oracle.com/javase/8/docs/api/java/util/List.html#remove-int-并使用值:https:// docs .oracle.com/javase/8/docs/api/java/util/List.html#remove-java.lang.Object- –

+0

你绝对是对的 - 道歉:) –

23

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

+1

真的不明白为什么它的工作原理,但由于肖恩;-) – Michel

+2

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

1

我是有这个问题,因为我还在初始化我的清单Arrays.asList

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

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

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

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

相关问题