如何在HashMap中更新键的值?

时间:2012-09-26 07:14:07

标签: java collections hashmap

我正在使用这样的HashMap,

HashMap<String,Set<String>> map = new HashMap<String,Set<String>>();

我在map

中添加元素之前尝试做
  1. 想要检查key是否存在,我可以使用map.containsKey()来获取它。
  2. 如果密钥存在,我想检查该密钥的Set大小。
  3. 如果size <= 1我希望在该集合中添加元素。

3 个答案:

答案 0 :(得分:3)

听起来像这样:

HashMap<String,Set<String>> map = new HashMap<String,Set<String>>();

Set<String> value = map.get("key");
if(value != null) {        
    if(value.size() <= 1) {
        value.add("some value");
    }
} else {
    map.put("key", new HashSet<String>());
}

现在,要么最后一点措辞不好(即你想要更新与密钥相关的Set),要么你真的想更新密钥本身,在这种情况下你可能只需删除它并添加一个新条目。

答案 1 :(得分:3)

我不会使用containsKey并获取,因为这意味着只需要一次查找。

private final Map<String,Set<String>> map = new HashMap<String,Set<String>>();

Set<String> set = map.get(key);
if(set != null && set.size() <= 1) 
    set.add(some$value);

唯一的问题是该值始终为null,除非您将其设置在某处,因此您可能想要的是

private final Map<String,Set<String>> map = new HashMap<String,Set<String>>();

Set<String> set = map.get(key);
if(value != null)
    map.put(key, set = new HashSet<String>());
if (set.size() <= 1) 
    set.add(some$value);

最大尺寸为2的套装是不寻常的。这有什么理由吗?

答案 2 :(得分:1)

您可以使用map.get(String key)从地图中获取该集。

然后测试Set的大小。如果需要,请添加您的元素。

现在您只需使用map.remove(String key)从地图中删除旧集合,然后使用put(String,Set)重新插入;