Sobes.tech
Junior — Middle

Ինչպիսի փոխկապակցություն պետք է լինի equals() և hashCode() մեթոդների միջև Java-ում՝ օբյեկտների ճիշտ աշխատանքի համար հավաքածուներում։

sobes.tech AI

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

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

Հիմնական կանոններ՝

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

Այս կանոնների խախտումը կարող է հանգեցնել հավաքածուների սխալ աշխատանքի, օրինակ՝ հնարավոր չէ գտնել օբյեկտը HashSet կամ HashMap-ում:

Օրինակ՝

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

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