2

我正在尝试使用 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
4

1 回答 1

4

问题是您正在使用迭代器删除一个项目(良好做法),但另一个迭代器不知道这一点。因此,调用it.next()失败。

您应该尝试仅使用一个迭代器或在循环后删除项目。

编辑:分析您的问题后,您似乎需要创建一个独特项目的集合。这让我觉得您想使用带有格式良好的比较器的集合。这样,将所有项目添加到您的 Set 将自动删除重复项。

于 2013-09-23T14:59:33.833 回答