关于Java:从HashMap删除条目

Delete entry from HashMap

本问题已经有最佳答案,请猛点这里访问。

我有一个哈希图:

1
2
3
public static Map<String, Set<String>> adjMap = new HashMap<String, Set<String>>();
adjMap.put(title, new HashSet<String>());
adjMap.get(title).add(cutTitle(graphLink));

现在,我要从值(hashset)中删除所有不作为键包含的条目。

这是迄今为止我的代码:

1
2
3
4
5
6
7
8
9
for(String s: adjMap.keySet()){
    for(Set<String> s1: adjMap.values()){
        for(String s2: s1){
            if(!s.contains(s2)){
                s1.remove(s2);
            }
        }
    }
}

但我有一个例外:

Exception in thread"main" java.util.ConcurrentModificationException


迭代地图

1
2
3
4
5
6
Iterator it = adjMap.entrySet().iterator();
    while (it.hasNext())
    {
       Entry item = it.next();
       map.remove(item.getKey());
    }

您可以使用ConcurrentHashMap,或者创建HashMap的副本并对副本进行任何更改。


我认为对于每个循环,不允许更改迭代对象。要删除条目,应该使用迭代器。

以地图迭代为例进行比较。