2012-09-26 38 views
1

我有HashMap的这个样子,如何更新HashMap中的键值?

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

我想在map添加元素做之前,

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

'if(map.containsKey(“x”)){Set s = map.get(“x”);如果(s.size()<= 1){s.add(“y”);}}'(哦,只是误读密钥应该更新 - 为什么?!) –

+3

为什么要更新密钥?你不能也不应该这样想 –

回答

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.这有什么理由吗?

+0

我想为一个键只存储2个值...所以我设置了最大大小为2。 – Vinesh

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

现在,无论是最后一点不好的措辞(例如,你需要更新与该键关联的设置),或者你真的要更新的密钥本身,在哪种情况下你可能不得不删除它并添加一个新条目。

+0

我知道OP要求它,但是如果value.size()与0进行比较会更有意义。但无论如何都有upvote;) –

+0

@David格兰特:你的意思是'== 0'而不是'<= 1'? – Tudor

+0

@Tudor:好吧,我是个白痴。 :) –

1

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

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

现在你可以用map.remove(String key)直接从map中移除旧的set,并用put(String,Set)重新插入它;