Sobes.tech
Junior — Middle

Jakie są podstawowe zasady związku między metodami equals i hashCode w Java?

sobes.tech AI

Odpowiedź od AI

Podstawowe zasady relacji między equals a hashCode w Java:

  • Jeśli dwa obiekty są równe według equals, ich hashCode musi być taki sam.
  • Jeśli hashCode dwóch obiektów jest inny, equals musi zwrócić false.
  • Jeśli equals zwraca false, hashCode może się zgadzać, ale jest to niepożądane, ponieważ pogarsza wydajność struktur hash.

To zapewnia poprawne działanie kolekcji korzystających z haszowania (HashMap, HashSet), gdzie hashCode określa kosz, a equals służy do dokładnego porównania obiektów.

Przykład:

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

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

Tutaj equals i hashCode opierają się na tym samym polu id, co zapewnia ich spójność.