相关疑难解决方法(0)

尝试从List中删除元素时,为什么会出现UnsupportedOperationException?

我有这个代码:

public static String SelectRandomFromTemplate(String template,int count) {
   String[] split = template.split("|");
   List<String> list=Arrays.asList(split);
   Random r = new Random();
   while( list.size() > count ) {
      list.remove(r.nextInt(list.size()));
   }
   return StringUtils.join(list, ", ");
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

06-03 15:05:29.614: ERROR/AndroidRuntime(7737): java.lang.UnsupportedOperationException
06-03 15:05:29.614: ERROR/AndroidRuntime(7737):     at java.util.AbstractList.remove(AbstractList.java:645)
Run Code Online (Sandbox Code Playgroud)

这怎么会是正确的方法?Java.15

java exception list arraylist

444
推荐指数
7
解决办法
37万
查看次数

为什么List.remove(int)抛出java.lang.UnsupportedOperationException?

我试图从a中删除元素List并获取java.lang.UnsupportedOperationException.

    public <T extends Object> void findDuplicates(
        String title, Multimap<T, ChunkId> map) {
        for (T key : map.keySet()) {
            Collection<ChunkId> ids = map.get(key);
            List<ChunkId> idList = (Arrays.asList(ids.toArray(new ChunkId[0])));
            removeUsedIds(idList);
            Collections.sort(idList);
//...
        }
    }

    private void removeUsedIds(List<ChunkId> idList) {
        // decrement counter to avoid indexing changed parts of list
        for (int i = idList.size() - 1; i >= 0; i--) {
            if (usedIdSet.contains(idList.get(i))) {
                idList.remove(i);   // **** Exception thrown here
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我明白了

Exception in thread …
Run Code Online (Sandbox Code Playgroud)

java

28
推荐指数
3
解决办法
4万
查看次数

使用iterator.remove()时UnsupportedOperationException

我试图从a中删除一些元素List,但即使是最简单的例子,就像这个答案或者这个中的元素一样,也行不通.

public static void main(String[] args)
{
    List<String> list = Arrays.asList("1", "2", "3", "4");
    for (Iterator<String> iter = list.listIterator(); iter.hasNext();)
    {
        String a = iter.next();
        if (true)
        {
            iter.remove();
        }
    }
}

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

使用正常Iterator而不是a ListIterator没有帮助.我错过了什么?我正在使用java 7.

java iterator

13
推荐指数
2
解决办法
1万
查看次数

ArrayList retainAll让我很困惑

我正在尝试使用java中的交叉点.如果我有以下内容,我只想要一个没有任何内容的arraylist,因为交集给了我零.

List<String> coll1 = Arrays.asList(["A"]);
List<String> coll2 = Arrays.asList(["B","C"]);

coll1.retainAll(coll2);
Run Code Online (Sandbox Code Playgroud)

但是retainAll会抛出此异常:

java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:161)
    at java.util.AbstractList$Itr.remove(AbstractList.java:374)
    at java.util.AbstractCollection.retainAll(AbstractCollection.java:410)
Run Code Online (Sandbox Code Playgroud)

如果我将列表转换为集合,那么如果我调用retainAll,我会得到一个空的集合:

Set<String> set1 = new HashSet<String>(coll1);
Set<String> set2 = new HashSet<String>(coll2);

set1.retainAll(set2); //gives me an empty set, which is good!
Run Code Online (Sandbox Code Playgroud)

为什么ArrayList有空交叉点的问题?

java

1
推荐指数
1
解决办法
416
查看次数

标签 统计

java ×4

arraylist ×1

exception ×1

iterator ×1

list ×1