【问题标题】:Question about java concurrenthashmap replace method关于java concurrenthashmap替换方法的问题
【发布时间】:2011-07-12 06:33:14
【问题描述】:

我有以下代码

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

}

两次输出都为空。不是应该是1秒吗?

【问题讨论】:

    标签: java concurrenthashmap


    【解决方案1】:

    来自the reference:

    替换(K键,V值)

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

    由于它以 null 开头,因此不会替换该键处的条目 - 因此不会为其创建条目。

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

    【讨论】:

      【解决方案2】:

      文档说:

      仅在以下情况下替换键的条目 当前映射到某个值。使徒行传 作为

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

      因此不,第一次替换不会做 put。

      【讨论】:

      • 哦,我的错,我以为我可以避免看跌期权。它不会让我接受答案,直到 7 分钟左右:)
      【解决方案3】:

      来自 javadoc:

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多