Middle
Чаро методҳои hashCode ва оператори муқоиса == навишта мешаванд?
sobes.tech AI
Ҷавоб аз AI
Иштироки hashCode ва оператори == (барои муқоиса кардани объектҳо ба асоси арзиш, на асоси ишора) барои кори дурустии ҷамъиятҳои асосёфта ба хеш, монанди HashSet ва HashMap, зарур аст.
- Оператор
==: Муқаррар мекунад, ки кай ду объект баробар ҳисоб мешаванд. Дар ҳолати пешфарз, он ишораҳоро муқоиса мекунад. Бо иваз кардани он, мо логикаи муқоисаи асосёфта ба мазмун ё хусусиятҳои объектро амалӣ мекунем. - Метод
hashCode: Қимати ададии (код хеш) барои объект бармегардонад. Агар ду объект мувофиқи==баробар бошанд,hashCode-и онҳо мебояд якхела бошад. Баръакс, ду объект метавонанд якхелаhashCodeдошта бошанд, аммо баробар набошанд.
Насозиши ин шартнома (объектҳои баробар бо hashCode фарқкунанда) ба кори нодурустии ҷамъиятҳои асосёфта ба хеш оварда мерасонад: унсурҳо метавонанд чандин маротиба илова шаванд, ки дар он ҷо ягонагӣ интизор аст (HashSet), ё пайдо кардан мушкил мешавад (HashMap).
Масалан:
class Person {
final String name;
final int age;
Person(this.name, this.age);
@override
bool operator ==(Object other) {
// Санҷед, ки other Person аст
if (identical(this, other)) return true;
if (other.runtimeType != runtimeType) return false;
// Муқоиса кардани хусусиятҳо
return other is Person && name == other.name && age == other.age;
}
@override
int get hashCode => Object.hash(name, age); // Ҳаши аз хусусиятҳо
}
void main() {
final p1 = Person('Alice', 30);
final p2 = Person('Alice', 30);
final p3 = Person('Bob', 25);
print(p1 == p2); // true (мувофиқ ба арзиш пас аз иваз кардан)
print(p1 == p3); // false
final peopleSet = {p1};
print(peopleSet.contains(p2)); // true (ҷустуҷӯ бо хеш ва муқоиса)
}