Sobes.tech
Назад к вопросам
Senior
4

Расскажите про методы equals() и hashCode(), их контракт и роль в HashMap

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

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

Контракт между equals() и hashCode():

  • Если два объекта равны по equals(), то у них должен быть одинаковый hashCode().
  • Если hashCode() у объектов разный, то equals() обязательно вернёт false.

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

Пример:

class Person {
  String id;

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

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

Здесь объекты считаются равными, если у них одинаковый id, и hashCode() основан на id.