我试图使用2个迭代器迭代HashMap。首先,对于散列中的每个键(整数),我计算“相似”的数字(在这种特殊情况下,类似的数字真的无关紧要)然后我必须通过制作它们来删除与当前键类似的键。当前密钥的值。我一直收到这个例外
线程“main”java.util.ConcurrentModificationException中的异常。可能是什么原因?我必须使用ConcurrentHashMap吗?
这是我正在编译的代码:
Set<Node> keySet = hash.keySet();
Iterator<Node> it = keySet.iterator();
while(it.hasNext()){
Node key = it.next();
ArrayList<Integer> similar = getAppropriateNum(key.getLabel(), 2);
for(int j = 0; j < similar.size(); j++){
Iterator<Node> it2 = keySet.iterator();
while(it2.hasNext()){
Node nod = it2.next();
if(nod.getLabel() == similar.get(j) && !nod.equals(key)){
it2.remove();
hash.put(key, nod);
}//end if
}//end while
}//end for
}//end while
答案 0 :(得分:4)
问题是你是使用迭代器删除一个项目(良好实践),但另一个迭代器不知道这一点。因此,对it.next()
的调用失败。
您应该尝试仅使用一个迭代器或在循环后删除项目。
编辑:在分析了您的问题之后,您似乎需要创建一个独特项目集合。这让我觉得你想要使用一个格式良好的比较器。这样,将所有项目添加到您的集合中将自动删除重复项。