Назад к вопросам
Middle
68
questionbank
В чем отличие между методами put и compute?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
put(key, value) просто ассоциирует value с key, заменяя существующее значение, если ключ уже присутствует.
compute(key, remappingFunction) вычисляет новое значение для key с использованием предоставленной функции remappingFunction. Функция принимает текущий ключ и его текущее значение (или null, если ключа нет) и возвращает новое значение, которое будет связано с ключом. Если функция возвращает null, запись удаляется.
Основные отличия:
- Обработка отсутствующих ключей:
putвставляет новое значение.computeможет использовать предыдущее значение (пусть дажеnull) для вычисления нового. - Зависимость от предыдущего значения:
putустанавливает значение независимо от предыдущего.computeявно использует предыдущее значение в функции вычисления. - Удаление записей:
put(key, null)удаляет запись.computeудаляет запись, если функция вычисления возвращаетnull.
Пример использования:
// Использование put
Map<String, Integer> countsPut = new HashMap<>();
countsPut.put("apple", 1);
countsPut.put("apple", 2); // Заменит 1 на 2
// Использование compute для инкрементации счетчика
Map<String, Integer> countsCompute = new HashMap<>();
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana будет 1
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana станет 2
countsCompute.compute("cherry", (key, value) -> null); // Удалит cherry, если он был