1

我有这样的HashMap,

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

我正在尝试在添加元素之前map

  1. 想检查是否key存在,我可以使用map.containsKey().
  2. 如果密钥存在,我想检查Set相应密钥的大小。
  3. 如果size <= 1 我想在该集合中添加一个元素。
4

3 回答 3

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

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

于 2012-09-26T07:17:41.587 回答
3

我不会使用 containsKey 和 get ,因为这意味着当您只需要一个时会进行两次查找。

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 的集合是不寻常的。这有什么原因吗?

于 2012-09-26T07:24:46.997 回答
1

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

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

现在您可以简单地使用 map.remove(String key) 从地图中删除旧集,然后使用 put(String, Set); 重新插入它。

于 2012-09-26T07:19:15.783 回答