Junior — Middle
Bir sinfda equals va hashCode metodlarini qayta yozishni talab qiladigan sabablar va holatlar nimalardir?
sobes.tech AI
AIdan javob
equals va hashCode metodlarini qayta yozish quyidagi hollarda zarur:
- Sinf mantiqiy ob'ektni ifodalaydi va ob'ektlarni taqqoslash maydonlarning qiymatlari asosida bo'lishi kerak, havolalar emas.
- Bu sinf ob'ektlari hash asoslangan kolleksiyalarda (masalan,
HashSet,HashMap) ishlatiladi.
Sabablar:
equalsikki ob'ekt qanday holatda teng deb hisoblanishini belgilaydi.hashCodeequalsga muvofiq teng bo'lgan ob'ektlar uchun bir xil qiymat qaytarishi kerak.
Agar bu metodlar qayta yozilmasa, taqqoslash referenslar bo'yicha bo'ladi (ya'ni, ob'ektlar faqat aynan bir xil nusxa bo'lsa teng), va hash kodi ob'ekt manziliga asoslangan bo'ladi, bu kolleksiyalarning noto'g'ri ishlashiga olib kelishi mumkin.
Qayta yozish misoli:
@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);
}