Sobes.tech
Junior — Middle

Javaда equals жана hashCode ыкмаларынын ортосундагы негизги принциптер кандай?

sobes.tech AI

AIден жооп

Javaда equals жана hashCode ортосундагы негизги принциптер:

  • Эгер эки объект equals боюнча бирдей болсо, алардын hashCodeу да бирдей болушу керек.
  • Эгер эки объекттин hashCodeу айырмаланса, equals милдеттүү түрдө false кайтаруусу керек.
  • Эгер equals false кайтарса, hashCodeу болушу мүмкүн, бирок бул каалаган эмес, анткени ал хеш түзүмдөрүнүн иштешин начарлатат.

Бул hash колдонгон коллекциялардын (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 — негизделген, алардын шайкештигин камсыздайт.