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 (ჰეშის და შედარების მიხედვით ძიება)
}