[英]java.util.ConcurrentModificationException while using iterator
[英]java.util.ConcurrentModificationException using 2 iterators
我正在尝试使用2个迭代器迭代HashMap。 首先,对于哈希中的每个键(整数),我都会计算“相似”的数字(在这种特殊情况下,实际上什么相似的数字并不重要),然后我必须通过使它们类似于当前键的方式来删除它们当前键的值。 我一直收到这个例外
线程“主”中的异常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
问题是您正在使用迭代器删除项目(良好做法),但另一个迭代器不知道这一点。 因此,对it.next()
的调用失败。
您应尝试仅使用一个迭代器或在循环后删除项目。
编辑 :分析完您的问题后,您似乎需要创建一个唯一项目的集合。 这使我认为您想将Set与格式正确的Comparator一起使用。 这样,将所有项目添加到集合中将自动删除重复项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.