Sobes.tech
Junior — Middle

Jaka jest rola metody GetHashCode podczas korzystania ze słownika lub kolekcji hash?

sobes.tech AI

Odpowiedź od AI

Metoda GetHashCode odgrywa kluczową rolę w korzystaniu z słowników (Dictionary) i innych kolekcji hash w C#. Zwraca wartość całkowitą (kod hash), która jest używana do szybkiego określenia pozycji obiektu w tablicy haszującej.

Gdy dodajesz obiekt do słownika, najpierw wywoływana jest metoda GetHashCode, aby określić kosz (bucket), do którego zostanie umieszczony element. Podczas wyszukiwania elementu po kluczu, najpierw oblicza się kod hash, aby szybko znaleźć odpowiedni kosz, a następnie wywołuje się Equals dla dokładnego porównania.

Ważne jest, aby:

  • Jeśli dwa obiekty są równe (Equals zwraca true), to ich GetHashCode powinien zwracać tę samą wartość.
  • Dobrze rozłożone kody hash zmniejszają liczbę kolizji i zwiększają wydajność.

Przykład nadpisania:

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);
    }
}