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