Какие отличия между методами 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() просто заменяет значение.