Почему ключ HashMap должен быть иммутабельным?

Ответ

Если изменить поле, участвующее в hashCode — объект окажется в «неправильном» bucket. contains() вернёт false. Объект потерян — ни найти, ни удалить. Утечка памяти. Решение: immutable-ключи (String, Integer, record).

Разбор: Если изменить поле, влияющее на hashCode, объект остаётся в старом bucket'е (он вычислялся при put), а поиск пойдёт в новый bucket — get/containsKey вернут промах, значение фактически теряется. Дистракторы правдоподобны, но неверны: HashMap не делает автоматический rehash при мутации ключа, не бросает ConcurrentModificationException и держит сильную ссылку на ключ, так что GC его не удалит.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться