Middle
Nima uchun hashCode metodlari va == taqqoslash operatori qayta yoziladi?
sobes.tech AI
AIdan javob
HashCode va == operatorini qayta yozish (obyektlarni qiymat bo‘yicha, havolalar emas, solishtirish uchun) HashSet va HashMap kabi xash asosidagi kolleksiyalarni to‘g‘ri ishlash uchun zarur.
==operatori: Ikki obyekt teng hisoblanishi uchun qanday shartlar bajarilishini belgilaydi. Standart holatda, u obyektlarning referenslarini solishtiradi. Uni qayta yozish bilan, obyektning mazmuni yoki atributlari bo‘yicha solishtirish logikasini amalga oshiramiz.hashCodemetodi: Obyekt uchun butun sonli qiymat (hash kod) qaytaradi. Agar ikki obyekt==bo‘yicha teng bo‘lsa, ularninghashCodebir xil bo‘lishi kerak. Aks holda, ikki obyekt bir xilhashCodega ega bo‘lishi mumkin, lekin ular teng bo‘lmasligi mumkin.
Ushbu shartnoma buzilishi (teng obyektlarning turli hashCodelarga ega bo‘lishi) hash asosidagi kolleksiyalarning noto‘g‘ri ishlashiga olib keladi: elementlar takroran qo‘shilishi mumkin (HashSetda), yoki topilmasligi mumkin (HashMapda).
Misol:
class Person {
final String name;
final int age;
Person(this.name, this.age);
@override
bool operator ==(Object other) {
// other Person ekanligini tekshirish
if (identical(this, other)) return true;
if (other.runtimeType != runtimeType) return false;
// atributlarni solishtirish
return other is Person && name == other.name && age == other.age;
}
@override
int get hashCode => Object.hash(name, age); // atributlardan hash yaratish
}
void main() {
final p1 = Person('Alice', 30);
final p2 = Person('Alice', 30);
final p3 = Person('Bob', 25);
print(p1 == p2); // true (qiymat bo‘yicha solishtirish, qayta yozilganidan keyin)
print(p1 == p3); // false
final peopleSet = {p1};
print(peopleSet.contains(p2)); // true (hash va solishtirish orqali qidirish)
}