Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Контракт между equals() и hashCode(). Зачем он нужен для работы HashMap?

Вопрос проверяет понимание взаимосвязи этих методов и их важности для коллекций.

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

Контракт требует:

  1. Если a.equals(b) == true, то a.hashCode() == b.hashCode()

  2. Обратное не обязательно
    Нарушение контракта ломает работу HashMap - объекты могут потеряться или дублироваться.

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

Правила контракта:

  1. Согласованность: При повторных вызовах на неизменном объекте hashCode() должен возвращать одно значение

  2. Равенство объектов → Равенство хэшей (обратное неверно)

Пример нарушения:

class Person {
    String name;
    
    @Override
    public boolean equals(Object o) { /* сравнение по name */ }
    // Нет hashCode() → нарушение контракта
}

Person p1 = new Person("Alice");
Person p2 = new Person("Alice");

map.put(p1, 1);
map.get(p2);  // Вернет null, хотя объекты равны!

Для HashMap:

  • Хэш определяет корзину (bucket) для хранения

  • При коллизиях используется equals() для поиска

  • Нарушение → объекты попадают в разные корзины

Уровень

  • Рейтинг:

    1

  • Сложность:

    7

Навыки

  • Java

    Java

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

#equals

#hashcode

#hashmap

#contract

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