Вопрос о java concurrenthashmap метод замены - PullRequest
1 голос
/ 09 февраля 2011

У меня есть следующий код

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 второй раз?

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

С ссылка:

заменить (клавиша K, значение V)

Заменить запись только для ключа, если в настоящий момент отображается на какое-либо значение.

Поскольку он начинается с нуля, он не заменит запись с этой клавиши, поэтому он не создаст для нее запись.

Вы также можете увидеть в этой ссылке, что метод просто пропускает, чтобы вернуть ноль, если map.containsKey (key) имеет значение false, поэтому ничего не происходит.

1 голос
/ 09 февраля 2011

В документе написано:

Заменить запись для ключа только в том случае, если в данный момент отображается какое-то значение.Действует как

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

Следовательно, нет, первая замена не делает пут.

0 голосов
/ 09 февраля 2011

Из javadoc:

Заменяет запись для ключа только в том случае, если в данный момент отображается на заданное значение.

null Ожидается оба раза, посколькуникогда не отображение для key.

...