Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: equals, hashcode

Что произойдет, если equals() переопределён, а hashCode() — нет?

Вопрос проверяет понимание контракта equals() / hashCode() и его влияния на работу хеш-коллекций.

Короткий ответ

Если equals() переопределён, а hashCode() — нет, контракт между ними нарушается. Объекты, которые считаются равными, могут иметь разные hashCode(). В хеш-коллекциях такие объекты будут вести себя некорректно. Например, объект может не находиться в HashMap, хотя он там есть. Это приводит к трудноуловимым ошибкам.

Длинный ответ

Контракт equals() и hashCode() напрямую влияет на корректность работы HashMap и HashSet.

Что ожидает HashMap

HashMap работает в два шага:

  1. Вычисляет hashCode() ключа и определяет bucket

  2. Внутри bucket сравнивает ключи через equals()

Если hashCode() не согласован с equals(), первый шаг ломается.

Проблема на практике

Рассмотрим ситуацию:

  • два объекта логически равны (equals() == true)

  • hashCode() у них разный (унаследован от Object)

Результат:

  • объекты попадают в разные bucket’ы

  • HashMap не вызывает equals()

  • поиск и удаление не работают

Пример сценария:

map.put(user1, "value");
// позже
map.get(user2); // null, хотя equals(user1, user2) == true

Где ошибка проявляется чаще всего

  • HashMap

  • HashSet

  • ConcurrentHashMap

  • любые структуры на основе хеширования

Почему это опасно

Такая ошибка:

  • не вызывает исключений

  • проявляется только в runtime

  • сложно диагностируется

Вывод: если переопределяется equals(), hashCode() обязан быть переопределён всегда.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • Java

    Java

Ключевые слова

#equals

#hashcode

Подпишись на Java Developer в телеграм