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)trueqaytarishi kerak. -
Simmetriya: har qanday nol bo'lmagan referens qiymatlari
xvayuchun,x.equals(y)faqaty.equals(x)truebo'lsatrueqaytaradi. -
Transitivlik: har qanday nol bo'lmagan referens qiymatlari
x,yvazuchun, agarx.equals(y)truevay.equals(z)truebo'lsa,x.equals(z)hamtruebo'lishi kerak. -
Konsistensiya: har qanday nol bo'lmagan referens qiymatlari
xvayuchun,x.equals(y)ni takroran chaqirish doimtrueyoki doimfalseqaytarishi kerak, shart shuki,equalstaqqoslashlarida foydalanilgan hech qanday ma'lumotlar o'zgarmagan bo'lsa. -
Har qanday nol bo'lmagan referens qiymati uchun
x,x.equals(null)falsebo'lishi kerak. -
Agar ikki ob'ekt
equals(Object)metodi bilan teng bo'lsa, ularning har biri uchunhashCodemetodi chaqiruvi bir xil butun son qiymatini berishi kerak. -
Agar ikki ob'ekt
equals(java.lang.Object)metodi bilan teng bo'lmasa, ularning har biri uchunhashCodechaqiruvi 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
}
}