Sobes.tech
Junior — Middle
111

Quale relazione reciproca deve esistere tra i metodi equals() e hashCode() in Java per il corretto funzionamento degli oggetti nelle collezioni?

Risposta dell'AI

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);
}