java.lang.UnsupportedOperationException at java.util.AbstractList.remove(Unknown Source)

妖精的绣舞 提交于 2019-12-20 09:56:38

问题


I have tried below code

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

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

I was getting

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)  

Can anyone help me to solve this issue?


回答1:


Easy work around is just to pass in the List into an ArrayList's constructor.

For example:

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); 

Response:

true remove flag

collcetion [2, 3, 4]




回答2:


Slight correction: no, it's not an unmodifiable Collection. It just doesn't support adding and removing elements, because it is backed by the supplied array and arrays aren't resizeable. But it supports operations like list.set(index, element)




回答3:


I was having this problem, because I was also initializing my list with Arrays.asList:

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

To solve the problem, I used addAll instead:

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

This way you can edit the list, add new items or remove.




回答4:


The List returned by Arrays.asList method of java.util.Arrays class is a fixed-size list object which means that elements cannot be added to or removed from the list.

So functions like Adding or Removing cannot be operated on such kind of Lists.

The solution to adding or removing without getting java.lang.UnsupportedOperationException is ->

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

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

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




回答5:


A one liner fix is to declare your list like this:

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


来源:https://stackoverflow.com/questions/7399482/java-lang-unsupportedoperationexception-at-java-util-abstractlist-removeunknown

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!