Sobes.tech
Senior

Μιλήστε για τις μεθόδους equals() και hashCode(), το συμβόλαιό τους και το ρόλο τους στο HashMap

sobes.tech AI

Απάντηση από 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.