두 개의 정렬 된 목록에서 순위를 만들려고했습니다.컬렉션에서 항목을 제거하면 java.util.ConcurrentModificationException이 호출됩니다.
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);
}
이 코드는 java.util.ConcurrentModificationException을 호출합니다. 어떻게 처리할까요?
이 예외는 ModificationWhileIteratingException' '라고되어 있어야합니다 : 이미
result
에 축적되어 있기 때문에, 당신은 사용할 수 있습니다. 스레딩 동시성은 오류와 아무 관련이 없기 때문에 많은 혼란을 피할 수 있습니다. 이것은 SO에 관한 그런 첫 번째 질문과는 거리가 멀다! – yshavit