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

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

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

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

sobes.tech AI

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

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

Это важно для корректной работы коллекций, основанных на хешировании (например, 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();
}

Здесь equals сравнивает поле, и hashCode возвращает хеш этого же поля, обеспечивая согласованность.