Sobes.tech
Назад к вопросам
Middle+
3

Какой контракт между hashCode и equals?

Компании, где спрашивали
Мираполис

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

sobes.tech AI

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

  1. Если два объекта равны по методу equals(), то у них должен быть одинаковый hashCode().
  2. Если два объекта имеют одинаковый hashCode(), это не обязательно означает, что они равны по equals() (коллизии возможны).
  3. Метод hashCode() должен возвращать одно и то же значение при многократных вызовах, пока объект не изменился.

Это важно для корректной работы коллекций, основанных на хешировании (например, HashMap, HashSet).

Пример:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return field.equals(myClass.field);
}

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