Sobes.tech
Junior — Middle

Ինչպե՞ս է ապահովվում hashCode() և equals() մեթոդների համաձայնությունը Java-ում և ինչու է դա կարևոր?

sobes.tech AI

Պատասխան AI-ից

Java-да hashCode() և equals() մեթոդները պետք է համահունչ լինեն, որպեսզի օբյեկտները ճիշտ աշխատեն HashMap կամ HashSet նման հավաքածուներում: Կանոններ:

  • Եթե երկու օբյեկտներ հավասար են ըստ equals(), ապա նրանց hashCode() պետք է վերադարձնի նույն արժեքը:
  • Եթե երկու օբյեկտների hashCode() տարբեր են, ապա equals() անպայման կվերադարձնի false:

Սա կարևոր է, քանի որ hash աղյուսակները նախ օգտագործում են hashCode() արագ որոնման համար, հետո օգտագործում են equals() ճշգրիտ համեմատության համար: Այս պայմանը չպահպանելը կարող է հանգեցնել հավաքածուների սխալ աշխատանքի:

Օրինակ՝

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