Sobes.tech
Junior — Middle

Qual è il ruolo del metodo GetHashCode nell'utilizzo di un dizionario o di una collezione hash?

sobes.tech AI

Risposta dell'AI

Il metodo GetHashCode svolge un ruolo chiave nell'uso di dizionari (Dictionary) e altre collezioni hash in C#. Restituisce un valore intero (codice hash) che viene utilizzato per determinare rapidamente la posizione di un oggetto nella tabella hash.

Quando si aggiunge un oggetto a un dizionario, viene prima chiamato GetHashCode per determinare il contenitore (bucket) in cui verrà inserito l'elemento. Durante la ricerca di un elemento tramite la chiave, si calcola anche prima il codice hash per trovare rapidamente il contenitore corretto, e poi si chiama Equals per una comparazione precisa.

È importante che:

  • Se due oggetti sono uguali (Equals restituisce true), allora i loro GetHashCode devono restituire lo stesso valore.
  • Codici hash ben distribuiti riducono le collisioni e migliorano le prestazioni.

Esempio di overriding:

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