Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что такое equals() и hashCode()?

Вопрос проверяет понимание сравнения объектов и правил их использования в коллекциях на основе хеширования.

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

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

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

Чтобы корректно работать с объектами в Java, важно понимать, как определяется равенство.

equals()

Определение:
equals() — это метод, который определяет логическое равенство двух объектов.

По умолчанию (в Object):

  1. Сравниваются ссылки.

  2. Работает так же, как ==.

Обычно его переопределяют, чтобы сравнивать:

  • значения полей

  • бизнес-смысл объекта

Пример:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof User)) return false;
    User user = (User) o;
    return id == user.id;
}

hashCode()

Определение:
hashCode() возвращает целое число, которое используется для распределения объектов по корзинам в хеш-таблицах.

Основные требования:

  1. Один и тот же объект должен возвращать одинаковый хеш в течение жизни.

  2. Равные объекты должны иметь одинаковый хеш-код.

  3. Неравные объекты могут иметь одинаковый хеш (коллизия допустима).

Пример:

@Override
public int hashCode() {
    return Integer.hashCode(id);
}

Контракт equals/hashCode

Контракт гарантирует:

  1. Корректную работу HashMap, HashSet.

  2. Возможность быстрого поиска.

  3. Предсказуемое поведение коллекций.

Краткий вывод

equals() отвечает за логическое равенство, а hashCode() — за эффективность поиска, и оба метода всегда должны переопределяться вместе.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Java

    Java

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

#equals

#hashcode

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