Sobes.tech
Junior — Middle

Тавзеҳ диҳед, ки чӣ гуна усулҳои equals ва hashCode дар Java ба ҳам алоқаманданд ва чаро иҷрои дурустии онҳо барои кор кардани коллексияҳо муҳим аст.

sobes.tech AI

Ҷавоб аз AI

Дар Java, усулҳои equals ва hashCode дар ҳамдигар сахт вобаста буда, барои муқоиса кардани объектҳо ва нигоҳ доштани онҳо дар коллектсияҳо, монанди HashMap, HashSet истифода мешаванд.

Қоидаҳо:

  • Агар ду объект мувофиқи усули equals баробар бошанд (яъне, a.equals(b) == true), бояд hashCode-и онҳо якхела бошад.
  • Агар hashCode-и объектҳо фарқ кунад, equals бояд барои онҳо false баргардонад.

Чаро ин муҳим аст: Коллектсияҳои асосёфта ба хеш аввал hashCode-ро барои ёфтани тезтарини коса (bucket) истифода мебаранд, ва сипас equals-ро барои муқоисаи дақиқи объектҳо дар дохили коса. Агар ин усулҳо дуруст татбиқ нашаванд, объектҳо дар коллектсия пайдо нашаванд, ҳатто агар онҳо мантиқан баробар бошанд.

Маслиҳати дуруст:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return field1.equals(myClass.field1) && field2 == myClass.field2;
}

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}

Инчунин, татбиқи дурустии equals ва hashCode кафолат медиҳад, ки коллектсияҳо дуруст кор кунанд ва хатогиҳо дар ҷустуҷӯ, илова кардан ва хориҷ кардани унсурҳоро пешгирӣ мекунанд.