Sobes.tech
Junior — Middle

Javaда объекттердин коллекцияларында туура иштеши үчүн equals() жана hashCode() методдору ортосунда кандай өз ара мамиле болушу керек?

sobes.tech AI

AIден жооп

Javaда equals() жана hashCode() методдору шайкеш болушу керек, объекттердин коллекциялар, өзгөчө HashMap жана HashSet сыяктуу, туура иштеши үчүн.

Негизги эрежелер:

  • Эгер эки объект equals() боюнча бирдей болсо, алардын hashCode() методдору бирдей маанини кайтаруусу керек.
  • Эгер hashCode() эки объект үчүн айырмаланса, алар ар башка деп эсептелет жана equals() чакырылбайт.
  • Эгер hashCode() бирдей болсо, объекттер бирдей же эмес болушу мүмкүн, ошондуктан equals() чакырылат текшерүү үчүн.

Бул эрежелердин бузулушу коллекциялардын туура эмес иштешине алып келиши мүмкүн, мисалы, HashSet же HashMap ичинде объектти таба албай калуу.

Мисал:

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

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