Sobes.tech
Junior — Middle

Кадомҳо ва сабабҳо барои навиштани дубораи усулҳои equals ва hashCode дар синф чӣҳоянд?

sobes.tech AI

Ҷавоб аз AI

Методларни equals ва hashCode қайта ёзиш керак, қачон:

  • Синф мантиқий мавжудиятни ифодалайди, ва объектларнинг таққосланиши майдонлар қийматларига асосланиши керак, манзилларга эмас.
  • Бу синфнинг объектлари хэшга асосланган коллецияларида (масалан, HashSet, HashMap) ишлатилиши мумкин.

Ҳақиқий сабаблар:

  • equals икки объект қандай ҳолда тенг деб ҳисобланишини белгилайди.
  • hashCode equalsга мувофиқ тенг бўлган объектлар учун бир хил қиймат қайтариши керак.

Агар бу методлар қайта ёзилмаса, таққослаш манзиллар бўйича бўлади (яъни, объектлар фақат шу ўша намуна бўлса тенг), ва хэш-код объект манзилига асосланган бўлади, бу коллецияларнинг нотўғри ишлашига олиб келиши мумкин.

Қайта ёзиш намунаси:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass that = (MyClass) o;
    return field1.equals(that.field1) && field2 == that.field2;
}

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}