Sobes.tech
Junior — Middle

Care este rolul metodei GetHashCode atunci când utilizați un dicționar sau o colecție hash?

sobes.tech AI

Răspuns de la AI

Metoda GetHashCode joacă un rol cheie în utilizarea dicționarelor (Dictionary) și a altor colecții hash în C#. Aceasta returnează o valoare întreagă (cod hash) utilizată pentru a determina rapid poziția unui obiect în tabelul hash.

Când adăugați un obiect într-un dicționar, mai întâi se apelează GetHashCode pentru a determina coșul (bucket) în care va fi plasat elementul. La căutarea unui element după cheie, se calculează mai întâi codul hash pentru a găsi rapid coșul potrivit, apoi se apelează Equals pentru o comparație exactă.

Este important ca:

  • Dacă două obiecte sunt egale (Equals returnează true), atunci valorile lor GetHashCode trebuie să fie aceleași.
  • Codurile hash bine distribuite reduc numărul de coliziuni și cresc performanța.

Exemplu de suprascriere:

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