Выбор ответа Junior ООП и класс Object спрашивают часто обновлено

Одинаковый hashCode у разных объектов

Вопрос

Два объекта не равны по equals, но имеют одинаковый hashCode. Нарушен ли контракт?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: коллизии допустимы, контракт требует равных хешей у равных. Контракт: если a.equals(b), то a.hashCode() == b.hashCode().

Варианты ответа

  1. Нет: коллизии допустимы, контракт требует равных хешей у равныхправильный ответ
  2. Да: разные по equals объекты обязаны иметь разные хеши
  3. Да, если объекты разных классов, а для одного класса допустимо
  4. Нет, но HashMap не сможет хранить оба объекта как разные ключи

Разбор

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.