在迭代它时从Hashmap中删除元素

时间:2015-12-06 03:50:37

标签: java hashmap concurrentmodification

这是我的代码。我有一个访问元素的arraylist。所以我想从hashmap中删除这些访问过的元素,下面是代码。它给了我并发修改例外。

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);
            }
        }

    }
}

我检查了一些其他类似的问题,但他们没有多大帮助。是否有一种更简洁的方法来做到这一点而不会导致异常?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

要在迭代过程中删除元素,请使用Iterator.remove()