Sobes.tech
Junior — Middle

Тафовутҳоро байни усулҳои equals() ва hashCode() дар Java шарҳ диҳед ва чаро онҳо дар якҷоягӣ заруранд.

sobes.tech AI

Ҷавоб аз AI

Методҳои equals() ва hashCode() дар Java бо муқоиса кардани объектҳо ва истифодаи онҳо дар коллексияҳо алоқаманданд.

  • 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() хешро бар асоси ҳамин майдонҳо бармегардонад, ки мутобиқатро таъмин мекунад.