Sobes.tech
Junior — Middle

Kā tiek nodrošināta hashCode() un equals() metožu saskaņotība Java un kāpēc tas ir svarīgi?

sobes.tech AI

Atbilde no AI

Java valodā metodes hashCode() un equals() ir jābūt saskaņotām, lai objekti pareizi darbotos kolekcijās, piemēram, HashMap vai HashSet. Noteikumi:

  • Ja divi objekti ir vienādi pēc equals(), tad to hashCode() jāatgriež tāda pati vērtība.
  • Ja hashCode() diviem objektiem atšķiras, tad equals() noteikti atgriezīs false.

Tas ir svarīgi, jo hash tabulas vispirms izmanto hashCode() ātrai meklēšanai, un pēc tam equals() precīzai salīdzināšanai. Šī līguma neievērošana var novest pie kolekciju nepareizas darbības.

Piemērs:

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