Junior — Middle
Jak metoda GetHashCode wpływa na działanie słownika w .NET?
sobes.tech AI
Odpowiedź od AI
Metoda GetHashCode w .NET służy do uzyskania kodu hash obiektu, który jest używany w tablicach haszujących, na przykład w słownikach (Dictionary<TKey, TValue>).
Gdy dodajesz obiekt do słownika, najpierw wywoływana jest metoda GetHashCode, aby określić kubełek (bucket), w którym zostanie przechowany. Podczas wyszukiwania obiektu słownik używa kodu hash do szybkiego dostępu.
Ważne jest, aby:
- Jeśli dwa obiekty są równe (według metody
Equals), ich kody hash muszą się zgadzać. - Jeśli kody hash się różnią, obiekty są uważane za różne.
Nieprawidłowa implementacja GetHashCode może spowodować, że słownik nie będzie mógł znaleźć klucza, nawet jeśli jest on tam, lub obniżyć wydajność z powodu dużej liczby kolizji.
Przykład poprawnej implementacji:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if (obj is Person other)
return Name == other.Name && Age == other.Age;
return false;
}
public override int GetHashCode()
{
return HashCode.Combine(Name, Age);
}
}
W ten sposób GetHashCode wpływa na poprawność i wydajność działania słownika.