Sobes.tech
Junior

Ի՞նչ տարբերություն կա Java-ում equals և hashCode մեթոդների միջև։

sobes.tech AI

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

equals մեթոդը օգտագործվում է օբյեկտների համեմատության համար՝ նրանց բովանդակության հավասարությունը որոշելու համար, իսկ hashCode վերադարձնում է ամբողջ թիվ, որը ներկայացնում է օբյեկտի հեշ-կոդը:

Հիմնական տարբերությունները՝

  • Նպատակը: equals՝ տրամաբանական հավասարության որոշման համար, hashCode՝ հեշ-կոդի սերնդացման համար (հաճախ հեշ-կառուցված տվյալների կառուցվածքներում օգտագործելու համար):
  • Արդյունքը: equals վերադարձնում է boolean (ճշմարիտ կամ կեղծ), hashCode՝ int:
  • Պայման: Եթե երկու օբյեկտներ հավասար են ըստ equals, նրանց hashCode-ները պետք է լինեն նույնը: հակառակ դեպքում՝ դա սխալ է. նույն hashCode-ով օբյեկտները կարող են ունենալ տարբեր բովանդակություն (կլիզիա):
  • Օգտագործում: equals օգտագործվում է օբյեկտների զույգային համեմատության համար: hashCode օգտագործվում է հեշ-կառուցված հավաքածուներում (օրինակ, HashSet, HashMap) արագ որոնման համար:

Օրինակ՝

// Օրինակային դաս
class MyObject {
    private int id;
    private String name;

    public MyObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // `equals`-ի վերագրում
    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Տիպի ստուգում
        if (o == null || getClass() != o.getClass()) return false; // null և տիպի ստուգում
        MyObject myObject = (MyObject) o; // Տիպի փոխարկում
        return id == myObject.id && Objects.equals(name, myObject.name); // Մայդյանների համեմատություն
    }

    // `hashCode`-ի վերագրում
    @Override
    public int hashCode() {
        return Objects.hash(id, name); // Հեշ-կոդի սերունդ՝ հիմք ընդունելով մայդյանները
    }
}

Կարևոր է, որ երկու մեթոդներն էլ (equals և hashCode) միասին վերագրեն, եթե մեկը վերագրում է, որպեսզի պայմանագիրը չխախտվի և հավաքածուների ճիշտ աշխատանքը ապահովվի: