Sobes.tech
Middle

Equals va hashCode metodlari uchun qanday qoidalar mavjud?

sobes.tech AI

AIdan javob

  1. Agar ikki ob'ekt equals(Object) metodiga ko'ra teng bo'lsa, ularning hash-kodlari (hashCode()) ham teng bo'lishi kerak.
  2. Agar ikki ob'ekt equals(Object) metodiga ko'ra teng bo'lmasa, ularning hash-kodlari bir xil yoki farq qilishi mumkin. Tashkilotlar, hash asosidagi kolleksiyalarning ishlashini yaxshilash uchun, teng bo'lmagan ob'ektlar uchun turli hash-kodlarni ta'minlash yaxshi amaliyot hisoblanadi.
  3. hashCode() metodi, agar hech qanday ma'lumot o'zgarmagan bo'lsa, bir ob'ekt uchun bir nechta chaqiruvda ham bir xil qiymatlarni qaytarishi kerak.
  4. Simmetriya: har qanday a va b ob'ektlari uchun, agar a.equals(b) true bo'lsa, b.equals(a) ham true bo'lishi kerak.
  5. Refleksivlik: har qanday null bo'lmagan a ob'ekti uchun, a.equals(a) true bo'lishi kerak.
  6. Transitivlik: har qanday a, b va c ob'ektlari uchun, agar a.equals(b) true va b.equals(c) true bo'lsa, a.equals(c) ham true bo'lishi kerak.
  7. Konsistensiya: har qanday null bo'lmagan a va b ob'ektlari uchun, a.equals(b) ni takroriy chaqirishlar ketma-ket true yoki false qaytarishi kerak, agar equals(Object) uchun ishlatiladigan ma'lumotlar o'zgarmagan bo'lsa.

Misol uchun implementatsiya:

public class MyClass {

    private int value;
    private String name;

    public MyClass(int value, String name) {
        this.value = value;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        // Ob'ekt identifikatsiyasini tekshirish
        if (this == o) {
            return true;
        }
        // Ob'ekt turini tekshirish
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Tipga o'tkazish
        MyClass myClass = (MyClass) o;
        // Maydonlar bo'yicha solishtirish
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // nulllarni boshqarish uchun Objects.equals
    }

    @Override
    public int hashCode() {
        // Hash kodini generatsiya qilish uchun Objects.hash
        return Objects.hash(value, name);
    }

    // Boshqa metodlar...
}