Ինչու է անհրաժեշտ վերագրել hashCode և equals մեթոդները, երբ նույն օբյեկտները ավելացնում ենք HashSet-ին?
sobes.tech AI
Պատասխան AI-ից
Java-յում HashSet-ը օգտագործում է հեշ-թերթ՝ տարրերը պահելու համար։ Ճիշտ որոշելու համար, արդյոք երկու օբյեկտներ նույնն են և խուսափելու կրկնօրինակներից, HashSet-ը հիմնվում է hashCode() և equals() մեթոդների վրա։
hashCode()մեթոդը հաշվում է օբյեկտի հեշ-կոդը, որը որոշում է, թե որ "տոպրակի" (bucket) մեջ այն տեղադրվելու է հեշ-թերթում։equals()մեթոդը համեմատում է երկու օբյեկտների հավասարությունը։
Եթե դուք չեք վերագրում այս մեթոդները ձեր դասում, ապա օգտագործվելու է Object դասի իրականացումը, որը համեմատում է օբյեկտները հղումներով (այսինքն՝ երկու տարբեր օբյեկտներ, որոնք ունեն նույն տվյալները, կհամարվեն տարբեր)։
Հետևաբար, անհրաժեշտ է վերագրել hashCode() և equals() մեթոդները այնպես, որ հաշվի առնվեն օբյեկտի կարևոր դաշտերը։
Օրինակ՝
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field1.equals(myClass.field1) && field2.equals(myClass.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
Անհրաժեշտ է, որպեսզի HashSet-ը ճիշտ ճանաչի նույնական օբյեկտները և չթույլատրի կրկնօրինակները, այլապես այն կարող է պահել մի քանի նույն տվյալներով օբյեկտներ, ինչը խախտում է հավաքածուի տրամաբանությունը։