Middle
Neden hashCode metodları ve == karşılaştırma operatörü yeniden tanımlanıyor?
sobes.tech yapay zeka
AI'dan gelen yanıt
hashCode ve == operatörünün yeniden tanımlanması (nesneleri değerlerine göre, referansa değil) HashSet ve HashMap gibi karma tabanlı koleksiyonların doğru çalışması için gereklidir.
==operatörü: İki nesnenin eşit sayılma durumunu belirler. Varsayılan olarak, nesnelerin referanslarını karşılaştırır. Yeniden tanımlayarak, nesnenin içeriğine veya özniteliklerine göre karşılaştırma mantığını uygularız.hashCodemetodu: Nesne için tam sayı değeri (hash kodu) döner. Eğer iki nesne==ile eşitse,hashCodedeğerleri aynı olmalıdır. Tersine, iki nesne aynıhashCode'a sahip olabilir, ama eşit olmayabilir.
Bu sözleşmenin ihlali (eşit nesnelerin farklı hashCode'lara sahip olması), karma tabanlı koleksiyonların düzgün çalışmamasına yol açar: elemanlar tekrar tekrar eklenebilir (HashSet), veya bulunamayabilir (HashMap).
Örnek:
class Person {
final String name;
final int age;
Person(this.name, this.age);
@override
bool operator ==(Object other) {
// Diğer nesnenin Person olup olmadığını kontrol et
if (identical(this, other)) return true;
if (other.runtimeType != runtimeType) return false;
// Öznitelikleri karşılaştır
return other is Person && name == other.name && age == other.age;
}
@override
int get hashCode => Object.hash(name, age); // Özniteliklerden hash oluştur
}
void main() {
final p1 = Person('Alice', 30);
final p2 = Person('Alice', 30);
final p3 = Person('Bob', 25);
print(p1 == p2); // true (değer karşılaştırması, yeniden tanımlamadan sonra)
print(p1 == p3); // false
final peopleSet = {p1};
print(peopleSet.contains(p2)); // true (hash ve karşılaştırma ile arama)
}