2012-09-26 40 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)重新插入它;