Найти в Дзене
DEBAGanov

Java 1233. Каковы правила переопределения метода Object.hashCode()?

1233. Каковы правила переопределения метода Object.hashCode()?

Когда вы создаете свой собственный класс в Java, вам может потребоваться определить метод hashCode() для этого класса. Метод hashCode() используется для вычисления хеш-кода (некоторого уникального числового значения) объекта, который может быть использован, например, в качестве ключа в хеш-таблице.

Правила переопределения метода hashCode() следующие:

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

Кроме того, для уменьшения коллизий хеш-код должен быть равномерно распределен в пределах диапазона возможных значений (обычно int).

Пример корректного переопределения методов hashCode() и equals():

public class MyClass {
private int id;
private String name;

// constructors, getters, setters, etc.
@Override public int hashCode() {
int result = 17;
result = 31 * result + id;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}

@Override public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof MyClass)) return false;
MyClass c = (MyClass) o;
return id == c.id && (name == null ? c.name == null : name.equals(c.name));
}
}

1606 вопрос-ответ по Java

Курс Spring Framework

Tелеграмм каналDEBAGanov

Мое резюмеDEBAGanov