从集合中删除项目调用java.util.ConcurrentModificationException

pod*_*dek -2 java collections loops exception

我试图从两个排序列表创建排名.

 List<Ordered<String>> rankedList = Collections.synchronizedList(WebCBIR.run(queryData, clusters, idf));
 List<Ordered<String>> rankedList2 = Collections.synchronizedList(WebCBIR.run(queryData, clusters));
 LinkedList<Ordered<String>> result = new LinkedList<>();
 Iterator<Ordered<String>> it = rankedList.iterator();
 Iterator<Ordered<String>> it2 = rankedList2.iterator();

 while (it.hasNext() && it2.hasNext())  {

        Ordered<String> o1 = it.next();
        Ordered<String> o2 = it2.next();
        Ordered<String> o = null;
        if(o1.value() > o2.value()){
            o = o1;
            rankedList.remove(o);
            rankedList2.remove(o);
        }
        else{
            o = o2;
            rankedList.remove(o);
            rankedList2.remove(o);

        }
        result.add(o);
}
Run Code Online (Sandbox Code Playgroud)

此代码调用java.util.ConcurrentModificationException.怎么处理呢?

san*_*hat 8

虽然使用迭代器不会从List中删除,而是使用iterator.remove()方法

while (it.hasNext() && it2.hasNext())  {

        Ordered<String> o1 = it.next();
        Ordered<String> o2 = it2.next();
        Ordered<String> o = null;
        if(o1.value() > o2.value()){
            o = o1;
            it.remove();
            it2.remove();
        }
        else{
            o = o2;
            it.remove();
            it2.remove();

        }
        result.add(o);
}
Run Code Online (Sandbox Code Playgroud)