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 кафолат медиҳад, ки коллектсияҳо дуруст кор кунанд ва хатогиҳо дар ҷустуҷӯ, илова кардан ва хориҷ кардани унсурҳоро пешгирӣ мекунанд.