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() ошол эле талааларга негизделген хешти кайтарат, бул туруктуулукту камсыздайт.