Sobes.tech
Junior — Middle

Ներկայացրեք տարբերությունները Java-ի մեջ equals() և hashCode() մեթոդների միջև և թե ինչու են նրանք միասին անհրաժեշտ։

sobes.tech AI

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

Java-յի equals() և hashCode() մեթոդները կապված են օբյեկտների համեմատության և դրանց օգտագործման հետ հավաքածուներում:

  • equals() որոշում է, արդյոք երկու օբյեկտներ տրամաբանական իմաստով հավասար են: Դեպքային, Object դասում, այն համեմատում է հղումները (այսինքն, արդյոք դրանք նույն օբյեկտներն են հիշողության մեջ), բայց սովորաբար վերագրում է պարունակության համեմատությանը:

  • hashCode() վերադարձնում է ամբողջ թիվ — օբյեկտի հեշ-կոդը: Օրինակ, այն օգտագործվում է հեշ աղյուսակներում (HashMap, HashSet) արագ որոնման համար:

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

Օրինակ՝

class Person {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return age == p.age && name.equals(p.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Այստեղ equals() համեմատում է դաշտերը, իսկ hashCode() վերադարձնում է նույն դաշտերի հիման վրա հեշ, ինչը ապահովում է կոնսիստենցիան։