Sobes.tech
Назад к вопросам
Junior — Middle
100

Какие отличия между методами put() и compute() в классе ConcurrentHashMap в Java?

Ответ от нейросети

sobes.tech AI

Методы put() и compute() в классе ConcurrentHashMap имеют разные назначения и поведение:

  • put(K key, V value) — просто добавляет или заменяет значение по ключу. Если ключ уже существует, старое значение заменяется новым.

  • compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) — более гибкий метод, который позволяет вычислить новое значение на основе текущего. В функцию передаются ключ и текущее значение (или null, если ключ отсутствует), и возвращается новое значение, которое будет записано. Если функция возвращает null, то ключ удаляется из карты.

Пример использования compute():

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("apple", 2);

// Увеличить значение по ключу "apple" на 1
map.compute("apple", (key, val) -> val == null ? 1 : val + 1);

// Если ключ отсутствует, установит значение 1
map.compute("banana", (key, val) -> val == null ? 1 : val + 1);

Таким образом, compute() полезен для атомарного обновления значения на основе текущего, а put() просто заменяет значение.