Middle
Ի՞նչ կանոններ կան equals և hashCode մեթոդների համար։
sobes.tech AI
Պատասխան AI-ից
- Եթե երկու օբյեկտներ հավասար են
equals(Object)մեթոդով, ապա նրանց hash-кոդերը (որը վերադարձնում էhashCode()մեթոդը) պետք է լինեն նույնը: - Եթե երկու օբյեկտներ չեն հավասար
equals(Object)մեթոդով, ապա նրանց hash-кոդերը կարող են լինել նույնը կամ տարբեր: hashCode()մեթոդը պետք է վերադարձնի նույն արժեքը նույն օբյեկտի համար մի քանի կանչերի դեպքում, եթե ոչ մի տեղեկատվություն, որը օգտագործվում է hash-кոդը հաշվարկելու համար, չի փոխվել:- Սիմմետրիկություն: ցանկացած
aևbօբյեկտների համար, եթեa.equals(b)հավասար էtrue, ապաb.equals(a)նույնպես պետք է լինիtrue: - Ռեֆլեկտիվություն: ցանկացած
aոչ զրոյական օբյեկտի համար,a.equals(a)պետք է լինիtrue: - Թրանցիտություն: ցանկացած
a,bևcօբյեկտների համար, եթեa.equals(b)հավասար էtrueևb.equals(c)հավասար էtrue, ապաa.equals(c)նույնպես պետք է լինիtrue: - Համապատասխանություն: ցանկացած
aևbոչ զրոյական օբյեկտների համար, բազմակիa.equals(b)կանչերը պետք է հերթականորեն վերադարձնենtrueկամfalse, եթեequals(Object)-ի օգտագործած տեղեկատվությունը չի փոխվել:
Օրինակ իրականացման:
public class MyClass {
private int value;
private String name;
public MyClass(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Օբյեկտների նույնականության ստուգում
if (this == o) {
return true;
}
// Օբյեկտի տիպի ստուգում
if (o == null || getClass() != o.getClass()) {
return false;
}
// Տիպի վերածում
MyClass myClass = (MyClass) o;
// Փաստերի համեմատում
return value == myClass.value &&
Objects.equals(name, myClass.name); // Օգտագործում ենք Objects.equals null-ների համար
}
@Override
public int hashCode() {
// Օգտագործում ենք Objects.hash՝ հիմնված ֆիլդերի վրա հեշ-կոդի սերունդը
return Objects.hash(value, name);
}
// Այլ մեթոդներ...
}