Sobes.tech
Junior — Middle

Kokie yra pagrindiniai principai, susiję su equals ir hashCode metodais Java kalboje?

sobes.tech AI

Atsakymas iš AI

Pagrindiniai ryšio tarp equals ir hashCode Java kalboje principai:

  • Jei du objektai yra lygūs pagal equals, jų hashCode turi būti tas pats.
  • Jei dviejų objektų hashCode skiriasi, equals privalo grąžinti false.
  • Jei equals grąžina false, hashCode gali sutapti, tačiau tai nėra pageidautina, nes blogina hash struktūrų našumą.

Tai užtikrina teisingą kolekcijų, naudojančių hash'ą (HashMap, HashSet), veikimą, kur hashCode nustato kibirą, o equals – tikslią objektų palyginimą.

Pavyzdys:

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

Čia equals ir hashCode yra pagrįsti tuo pačiu lauku – id, užtikrinant jų nuoseklumą.