Sobes.tech
Junior — Middle
110

Java'da objects'larning kolleksiyalarda to'g'ri ishlashini ta'minlash uchun equals() va hashCode() metodlari o'rtasida qanday o'zaro munosabat bo'lishi kerak?

AIdan javob

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