Sobes.tech
Junior — Middle

Kaip užtikrinama hashCode() ir equals() metodų suderinamumas Java ir kodėl tai svarbu?

sobes.tech AI

Atsakymas iš AI

Java kalboje metodai hashCode() ir equals() turi būti suderinti, kad objektai tinkamai veiktų kolekcijose, tokiose kaip HashMap ar HashSet. Taisyklės:

  • Jei du objektai yra lygūs pagal equals(), jų hashCode() turi grąžinti tą pačią reikšmę.
  • Jei hashCode() dviejų objektų skiriasi, tada equals() tikrai grąžins false.

Tai svarbu, nes hash lentelės pirmiausia naudoja hashCode() greitam paieškai, o tada equals() tiksliai palyginti. Nesilaikymas šios sutarties gali sukelti netinkamą kolekcijų veikimą.

Pavyzdys:

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