关于java concurrenthashmap替换方法的问题

时间:2011-02-09 19:39:15

标签: 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秒钟吗?

3 个答案:

答案 0 :(得分:4)

来自the reference:

  

替换(K键,V值)

     

替换条目   仅当键映射到某个值时才用于键。

因为它以null开头,所以它不会替换该键的条目 - 所以它不会为它创建一个条目。

您还可以在该链接中看到,如果map.containsKey(key)为false,则该方法只会跳过以返回null,因此没有任何反应。

答案 1 :(得分:1)

医生说:

  

仅在键入时替换键的条目   目前映射到某个值。行为   如

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

因此,第一个替换不会执行put。

答案 2 :(得分:0)

来自javadoc:

  

仅当前映射到给定值时才替换键的条目。

null两次都是预期的,因为key没有映射。