Выбор ответа Junior ООП и класс Object спрашивают часто обновлено
Одинаковый hashCode у разных объектов
Вопрос
Два объекта не равны по equals, но имеют одинаковый hashCode. Нарушен ли контракт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нет: коллизии допустимы, контракт требует равных хешей у равных. Контракт: если a.equals(b), то a.hashCode() == b.hashCode().
Варианты ответа
- Нет: коллизии допустимы, контракт требует равных хешей у равныхправильный ответ
- Да: разные по equals объекты обязаны иметь разные хеши
- Да, если объекты разных классов, а для одного класса допустимо
- Нет, но HashMap не сможет хранить оба объекта как разные ключи
Разбор
Контракт: если a.equals(b), то a.hashCode() == b.hashCode(). В обратную сторону ничего не требуется: хешей 2^32, объектов больше, коллизии неизбежны. Они только ухудшают производительность, HashMap хранит оба объекта в одной корзине и различает их через equals.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.