关于Java:迭代/更新哈希图

Iterating through/Updating HashMap

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

我知道有几种方法可以迭代散列图,但是在进行过程中修改散列图的好方法是什么(除了创建新的散列图和去掉旧的散列图之外)

我想要类似的东西

1
2
3
4
5
6
7
8
for (Map.Entry<String, Integer> entry : wordcounts.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    if(blacklist.contains(key))
        //remove key/value for that key from wordcounts
    if(mappings.contains(key))
     //change key in wordcounts from one string to another based on the key's value in a <string,string> map (mappings)
}

我在看地图的时候可能会修改它吗?我必须使用迭代器吗?


利用地图:先浏览其他收藏,然后进行操作。

1
2
3
4
5
6
7
8
9
for(String blacklisted : blacklist) {
    wordcounts.remove(blacklisted);
}
for(String mapping : mappings) {
    String oldKey =    // get old key
    String value = wordcounts.get(oldKey);
    wordcounts.remove(oldKey);
    wordcounts.put(mapping, value);
}


使用Map.Entry.setValue更改映射的值。如果要删除映射,use setValue(null)use an Iterator


不要在迭代过程中尝试移除项,否则会从迭代器中得到异常。最好的办法是

a)通过迭代/复制到新的映射或b)跟踪要删除的项,并在迭代完成后删除它们。

如果你在换钥匙,同样的事情也适用。继续跟踪,并在迭代完成后执行删除/添加操作。

如果你只是在改变价值观,那就去做吧。