Sobes.tech
Junior — Middle

Чӣ тавр мутобиқати усулҳои hashCode() ва equals() дар Java таъмин карда мешавад ва чаро ин муҳим аст?

sobes.tech AI

Ҷавоб аз AI

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

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

Ин муҳим аст, зеро таблицаҳои хеш аввал hashCode()-ро барои ҷустуҷӯи зуд истифода мебаранд, ва сипас equals()-ро барои муқоисаи дақиқ. Набудани риояи ин шарт метавонад ба кори нодурустии коллексияҳо оварда расонад.

Масалан:

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

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