1

私は次のコードを持っています

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秒じゃないですか?

4

3 に答える 3

4

参照から

replace(Kキー、V値)

現在何らかの値にマップされている場合にのみ、キーのエントリを置き換えます。

nullで始まるため、そのキーのエントリは置き換えられません。したがって、エントリは作成されません。

また、そのリンクでは、map.containsKey(key)がfalseの場合、メソッドが単にスキップしてnullを返すため、何も起こらないことがわかります。

于 2011-02-09T19:43:16.243 に答える
1

ドキュメントによると:

現在何らかの値にマップされている場合にのみ、キーのエントリを置き換えます。として機能します

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

したがって、いいえ、最初の置換はプットを行いません。

于 2011-02-09T19:44:19.903 に答える
0

javadocから:

現在特定の値にマップされている場合にのみ、キーのエントリを置き換えます。

nullのマッピングがなかったため、両方の時間でISが期待されkeyます。

于 2011-02-09T19:45:16.823 に答える