Sobes.tech
Junior — Middle

HashSet ga o'xshash ob'ektlarni qo'shishda hashCode va equals metodlarini qayta yozish nima uchun zarur?

sobes.tech AI

AIdan javob

Java'da HashSet elementlarni saqlash uchun xesh-jadvaldan foydalanadi. Ikki ob'ektning bir xil ekanligini to'g'ri aniqlash va takroriyliklarni oldini olish uchun HashSet hashCode() va equals() metodlariga tayanadi.

  • hashCode() metodi ob'ektning xesh-kodini hisoblaydi, bu esa u qaysi "qutiga" (bucket) joylashtirilishini belgilaydi.
  • equals() metodi ikki ob'ektni tenglik uchun solishtiradi.

Agar siz bu metodlarni o'z sinfingizda qayta yozmasangiz, Object sinfidan foydalaniladi, bu esa ob'ektlarni havola bo'yicha solishtiradi (ya'ni, ikki turli ob'ekt bir xil ma'lumotlarga ega bo'lsa ham, ular turli deb hisoblanadi).

Shuning uchun, HashSet to'g'ri bir xil ob'ektlarni tanib olish va takrorlarni oldini olish uchun, hashCode() va equals() metodlarini ob'ektning muhim maydonlarini hisobga oladigan tarzda qayta yozish zarur.

Misol:

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

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

Buning yordamida HashSet bir xil ma'lumotlarga ega bo'lgan bir nechta ob'ektlarni saqlay oladi, bu esa to'plam mantiqini buzadi.