5

我知道有几种方法可以遍历哈希图,但是什么是修改哈希图的好方法(除了创建一个新的哈希图并摆脱旧的哈希图)

我想要类似的东西

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

在我浏览地图时是否可以修改我的地图?我必须使用迭代器吗?

4

3 回答 3

3

利用地图:首先浏览您的其他收藏并进行操作。

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);
}
于 2013-07-08T17:23:29.957 回答
1

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

于 2013-07-08T17:19:58.073 回答
0

不要尝试在迭代期间删除项目,否则你会从迭代器中得到一个异常。最好的选择是

a)通过迭代/复制到新地图来克隆地图或b)跟踪要删除的项目并在完成迭代后删除它们。

如果您正在更改密钥,同样的事情也适用.. 随时跟踪并在完成迭代后执行删除/添加。

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

于 2013-07-08T17:28:37.097 回答