Sobes.tech
Junior — Middle

Как се осигурява съгласуваност между методите hashCode() и equals() в Java и защо е важно?

sobes.tech AI

Отговор от AI

В Java методите hashCode() и equals() трябва да са съгласувани, за да работят правилно обектите в колекции като HashMap или HashSet. Правила:

  • Ако два обекта са равни според equals(), тогава техният hashCode() трябва да връща еднаква стойност.
  • Ако hashCode() на два обекта е различен, тогава equals() задължително ще върне false.

Това е важно, защото хеш таблиците първо използват hashCode() за бързо търсене, а след това equals() за точно сравнение. Нарушаването на този контракт може да доведе до неправилна работа на колекциите.

Пример:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return id == person.id;
}

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