2011-02-09 36 views
1

我有以下代碼問題有關Java的ConcurrentHashMap替換方法

public class Test{ 

private static final String key = "key"; 

public static void main(String[] a){ 
    ConcurrentHashMap<String,String > map = new ConcurrentHashMap<String,String>(); 
    System.out.println(map.replace(key,"1")); 
    System.out.println(map.replace(key,"2")); 
} 

} 

輸出爲null兩次。難道不是1秒鐘?

回答

1

的醫生說:

更換的鍵輸入只有 目前映射到某一值。徒 作爲

if ((map.containsKey(key)) 
    return map.put(key, value); 
else 
    return null; 

因此,沒有,第一取代不做放。

+0

哦,我的壞,我認爲我可以避免一個放。它不會讓我接受答案,直到7分鐘或什麼東西:) – java123 2011-02-09 19:48:30

4

the reference:

REPLACE(K鍵,V值)

更換的鍵輸入 只有當前映射到某一值。

由於它以null開頭,它不會替換該鍵處的條目 - 因此它不會爲其創建條目。

您也可以在該鏈接中看到,如果map.containsKey(key)爲false,則該方法會簡單地跳過以返回null,因此沒有任何反應。

0

根據JavaDoc:

僅替換如果當前映射到給定值的鍵的條目。

null預計兩次,因爲從來沒有映射key