Что произойдёт, если положить объект в HashSet, а потом изменить поле, участвующее в hashCode?

Ответ

Потеряешь объект — найти его через contains() будет уже нельзя. Классическая ошибка с mutable-объектами в коллекциях.

Разбор: HashSet вычисляет bucket по hashCode при добавлении. После изменения поля contains() ищет объект в bucket'е, соответствующем новому хешу, где его нет, — объект «теряется». Пересчёта хешей на лету не происходит, и сравнение идёт не по ссылке, а через hashCode+equals.

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

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