Sobes.tech
Назад к вопросам
Junior — Middle
82

Какое взаимное отношение должно существовать между методами equals() и hashCode() в Java для корректной работы объектов в коллекциях?

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

sobes.tech AI

В Java методы equals() и hashCode() должны быть согласованы для корректной работы объектов в коллекциях, особенно в таких как HashMap и HashSet.

Основные правила:

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

Нарушение этих правил может привести к неправильному поведению коллекций, например, невозможности найти объект в HashSet или HashMap.

Пример:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    MyClass other = (MyClass) obj;
    return this.id == other.id;
}

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