Sobes.tech
Middle

Java'da equals va hashCode metodlarining shartlari haqida gapirib bering.

sobes.tech AI

AIdan javob

  • İzohorlik: har qanday nol bo'lmagan referens qiymati uchun x, x.equals(x) true qaytarishi kerak.

  • Simmetriya: har qanday nol bo'lmagan referens qiymatlari x va y uchun, x.equals(y) faqat y.equals(x) true bo'lsa true qaytaradi.

  • Transitivlik: har qanday nol bo'lmagan referens qiymatlari x, y va z uchun, agar x.equals(y) true va y.equals(z) true bo'lsa, x.equals(z) ham true bo'lishi kerak.

  • Konsistensiya: har qanday nol bo'lmagan referens qiymatlari x va y uchun, x.equals(y) ni takroran chaqirish doim true yoki doim false qaytarishi kerak, shart shuki, equals taqqoslashlarida foydalanilgan hech qanday ma'lumotlar o'zgarmagan bo'lsa.

  • Har qanday nol bo'lmagan referens qiymati uchun x, x.equals(null) false bo'lishi kerak.

  • Agar ikki ob'ekt equals(Object) metodi bilan teng bo'lsa, ularning har biri uchun hashCode metodi chaqiruvi bir xil butun son qiymatini berishi kerak.

  • Agar ikki ob'ekt equals(java.lang.Object) metodi bilan teng bo'lmasa, ularning har biri uchun hashCode chaqiruvi turli butun son qiymatlarini berishi shart emas. Biroq, dasturchi, teng bo'lmagan ob'ektlar uchun turli hash kodlarini yaratish hash jadvalining ishlashini yaxshilashi mumkinligini tushunishi kerak.

equals va hashCode metodlarini ikkisining ham qayta yozilishi muhim, shartnoma saqlanishi uchun. equals ni hashCode bilan yozmasdan ishlatish, hash asosidagi kolleksiyalar (masalan, HashMap, HashSet) noto'g'ri ishlashiga olib kelishi mumkin.

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Refleksivlik
        if (o == null || getClass() != o.getClass()) return false; // null va tur tekshiruvi
        Person person = (Person) o;
        return age == person.age &&
               Objects.equals(name, person.name); // Kontent bo'yicha taqqoslash
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age); // Maydonlar asosida hash generatsiyasi
    }
}