Junior — Middle
Кадомҳо ва сабабҳо барои навиштани дубораи усулҳои equals ва hashCode дар синф чӣҳоянд?
sobes.tech AI
Ҷавоб аз AI
Методларни equals ва hashCode қайта ёзиш керак, қачон:
- Синф мантиқий мавжудиятни ифодалайди, ва объектларнинг таққосланиши майдонлар қийматларига асосланиши керак, манзилларга эмас.
- Бу синфнинг объектлари хэшга асосланган коллецияларида (масалан,
HashSet,HashMap) ишлатилиши мумкин.
Ҳақиқий сабаблар:
equalsикки объект қандай ҳолда тенг деб ҳисобланишини белгилайди.hashCodeequalsга мувофиқ тенг бўлган объектлар учун бир хил қиймат қайтариши керак.
Агар бу методлар қайта ёзилмаса, таққослаш манзиллар бўйича бўлади (яъни, объектлар фақат шу ўша намуна бўлса тенг), ва хэш-код объект манзилига асосланган бўлади, бу коллецияларнинг нотўғри ишлашига олиб келиши мумкин.
Қайта ёзиш намунаси:
@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);
}