【问题标题】:java.lang.UnsupportedOperationException at java.util.AbstractList.remove(Unknown Source)java.util.AbstractList.remove 处的 java.lang.UnsupportedOperationException(未知来源)
【发布时间】:2011-11-16 00:02:46
【问题描述】:

我试过下面的代码

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)  

谁能帮我解决这个问题?

【问题讨论】:

  • 大家好,我是 stackoverflow 的新手,对这个网站的功能了解不多。我在工作时发现了这个问题,我只是认为这对其他人有帮助。所以添加了这个问题。
  • 您应该阅读常见问题解答。这里不是发布您知道答案的问题的地方
  • @deepankar 你可以回答你的问题。所以不要在下面添加相同的问题写你的答案并接受它。这个问题不会一直是悬而未决的问题
  • 顺便说一句...谢谢,这节省了我很多时间;-)
  • 我自己解决了这个问题。 最初我对这个问题一无所知。但经过一番研究,我发现Arrays.asList(s) 返回不可修改的集合,因此它抛出了UnsupportedOperationException。我们可以通过使用Collection c= new ArrayList(Arrays.asList(s));Collection c= new HashSet(Arrays.asList(s)); 列表创建一个新集合来解决这个问题

标签: java arrays exception collections


【解决方案1】:

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

【讨论】:

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

简单的解决方法是将 List 传递给 ArrayList 的构造函数。

例如:

字符串 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);

回复:

真正的删除标志

集合 [2, 3, 4]

【讨论】:

【解决方案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"));

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

【讨论】:

    【解决方案4】:

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

    因此无法对此类列表进行添加或删除等功能。

    添加或删除不获取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");
    
    

    【讨论】:

      【解决方案5】:

      一个简单的解决方法是像这样声明您的列表:

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

      【讨论】:

        猜你喜欢
        • 2017-03-16
        • 2014-06-11
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 2011-05-19
        • 2012-05-01
        相关资源
        最近更新 更多