繁体   English   中英

使用2个迭代器的java.util.ConcurrentModificationException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM