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.