Sobes.tech
Junior — Middle

Jak zapewniona jest spójność między metodami hashCode() i equals() w Java i dlaczego jest to ważne?

sobes.tech AI

Odpowiedź od AI

W Java, metody hashCode() i equals() muszą być zgodne, aby obiekty poprawnie działały w kolekcjach takich jak HashMap czy HashSet. Zasady:

  • Jeśli dwa obiekty są równe według equals(), to ich hashCode() musi zwracać tę samą wartość.
  • Jeśli hashCode() dwóch obiektów jest inny, to equals() na pewno zwróci false.

To jest ważne, ponieważ tablice haszujące najpierw używają hashCode() do szybkiego wyszukiwania, a potem equals() do dokładnego porównania. Nieprzestrzeganie tego kontraktu może prowadzić do nieprawidłowego działania kolekcji.

Przykład:

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