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