Sobes.tech
Middle

Ի՞նչ կանոններ կան equals և hashCode մեթոդների համար։

sobes.tech AI

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

  1. Եթե երկու օբյեկտներ հավասար են equals(Object) մեթոդով, ապա նրանց hash-кոդերը (որը վերադարձնում է hashCode() մեթոդը) պետք է լինեն նույնը:
  2. Եթե երկու օբյեկտներ չեն հավասար equals(Object) մեթոդով, ապա նրանց hash-кոդերը կարող են լինել նույնը կամ տարբեր:
  3. hashCode() մեթոդը պետք է վերադարձնի նույն արժեքը նույն օբյեկտի համար մի քանի կանչերի դեպքում, եթե ոչ մի տեղեկատվություն, որը օգտագործվում է hash-кոդը հաշվարկելու համար, չի փոխվել:
  4. Սիմմետրիկություն: ցանկացած a և b օբյեկտների համար, եթե a.equals(b) հավասար է true, ապա b.equals(a) նույնպես պետք է լինի true:
  5. Ռեֆլեկտիվություն: ցանկացած a ոչ զրոյական օբյեկտի համար, a.equals(a) պետք է լինի true:
  6. Թրանցիտություն: ցանկացած a, b և c օբյեկտների համար, եթե a.equals(b) հավասար է true և b.equals(c) հավասար է true, ապա a.equals(c) նույնպես պետք է լինի true:
  7. Համապատասխանություն: ցանկացած 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);
    }

    // Այլ մեթոդներ...
}