Java Core trainee

Что будет, если переопределить только equals, но не hashCode?

Ответ

Сломаются hash-структуры: HashMap, HashSet, Hashtable. Положили объект — посчитался один hashCode, переопределённый equals говорит «они равны», но другой hashCode значит другой бакет. Не найдёшь, что положил: get/contains ищет в одном бакете, а объект лежит в другом. Код компилируется, исключений нет — просто нарушен контракт equals/hashCode.

Разбор: Код компилируется без ошибок, но нарушается контракт: равные по equals объекты обязаны иметь равный hashCode, иначе они попадают в разные бакеты. В результате get/contains ищет в одном бакете, а объект лежит в другом, и найти его не удаётся — никаких исключений при этом не бросается.

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

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