Sobes.tech
Junior — Middle

Java'da equals va hashCode metodlari qanday bog'langanligini va ularning to'g'ri amalga oshirilishi kolleksiyalar ishida nima uchun muhimligini tushuntiring.

sobes.tech AI

AIdan javob

Java'da equals va hashCode metodlari yaqin bog'liq bo'lib, ular obyektlarni taqqoslash va HashMap, HashSet kabi kolleksiyalarda saqlash uchun ishlatiladi.

Qoidalar:

  • Agar ikki obyekt equals metodiga ko'ra teng bo'lsa (ya'ni, a.equals(b) == true), ularning hashCode qiymati ham bir xil bo'lishi kerak.
  • Agar obyektlarning hashCode qiymatlari farq qilsa, equals ular uchun false qaytarishi kerak.

Nima uchun bu muhim: Hash asosidagi kolleksiyalar avvalo hashCode yordamida tezda qutini (bucket) topadi, so'ngra equals yordamida qutidagi obyektlarni aniq taqqoslaydi. Agar bu metodlar noto'g'ri amalga oshirilgan bo'lsa, obyektlar kolleksiyada topilmasligi mumkin, hatto ular mantiqan teng bo'lsa ham.

To'g'ri amalga oshirish misoli:

@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 == myClass.field2;
}

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

Shu tarzda, equals va hashCode metodlarining to'g'ri amalga oshirilishi kolleksiyalarning to'g'ri ishlashini ta'minlaydi va qidirish, qo'shish va elementlarni o'chirishda xatoliklarni oldini oladi.