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