在遍历Hashmap时删除元素

3

这是我的代码。我有一个已访问元素的ArrayList。所以我想从哈希映射中删除这些已访问元素,以下是代码。它会给我一个concurrentmodification异常。

private static void removeVisitedNodes(ArrayList<String> arrayList) {
    // TODO Auto-generated method stub

    Iterator<String> it = arrayList.iterator();
    String temp;
    while(it.hasNext())
    {
        temp = it.next();
        System.out.println("temp is " + temp);
        Iterator<Entry<String, ArrayList<String>>> iter = neighbours_reachability_map.entrySet().iterator();

        // iterate through the hashmap to remove elements
        while (iter.hasNext()) {
            Entry<String, ArrayList<String>> entry = iter.next();
            if(entry.getValue().contains(temp)){
                //System.out.println("Contains it"  + entry.getValue().toString());
                entry.getValue().remove(temp);
            }
        }

    }
}

我查看了几个类似的问题,但它们并没有什么帮助。有没有更好的方法来避免引发异常?感谢您提前的帮助。


适用于我,你能展示一下你的输入值和堆栈跟踪吗? - dkatzel
邻居可达性图的键是 - 键:1- [4、5、6] 键:2- [5、6、4] 键:3- [7、4]..而列表是[4,5]。所以我正在尝试从哈希映射中删除所有的4和5。错误是 - Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next(Unknown Source) at acn.project.testAppend.removeVisitedNodes(testAppend.java:79) at acn.project.testAppend.main(testAppend.java:59) - maddie
2个回答

2

您可以将想要删除的元素放入另一个集合对象中,然后在迭代完成后删除这些元素。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接