Sobes.tech
Junior — Middle

Қоидаҳои асосии робитаи байни усулҳои equals ва hashCode дар Java чӣҳоянд?

sobes.tech AI

Ҷавоб аз AI

Принципҳои асосии робитаи байни equals ва hashCode дар Java:

  • Агар ду объект дар асоси equals баробар бошанд, hashCode-и онҳо бояд якхела бошад.
  • Агар hashCode-и ду объект фарқ кунад, equals бояд ҳатман false баргардонад.
  • Агар equals false баргардонад, hashCode метавонад мувофиқат кунад, аммо ин нолозим аст, зеро ин иҷрои структураҳои хешро бадтар мекунад.

Ин кафолат медиҳад, ки коллекияҳое, ки истифодаи хешро доранд (HashMap, HashSet), дуруст кор мекунанд, ки дар он hashCode муайян мекунад, ки куттӣ чист ва equals муқоисаи дақиқи объектҳоро анҷом медиҳад.

Масалан:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return Objects.equals(id, person.id);
}

@Override
public int hashCode() {
    return Objects.hash(id);
}

Ин ҷо, equals ва hashCode асос ёфтаанд ба ҳамон майдон id, ки кафолат медиҳад, ки онҳо мувофиқанд.