Sobes.tech
Senior

Erzählen Sie von den Methoden equals() und hashCode(), ihrem Vertrag und ihrer Rolle in HashMap

sobes.tech KI

Antwort von 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.