Sobes.tech
Junior — Middle

Qual é o papel do método GetHashCode ao usar um dicionário ou uma coleção de hash?

sobes.tech IA

Resposta da IA

O método GetHashCode desempenha um papel fundamental na utilização de dicionários (Dictionary) e outras coleções de hash em C#. Ele retorna um valor inteiro (código hash) que é usado para determinar rapidamente a posição de um objeto na tabela de hash.

Quando você adiciona um objeto ao dicionário, primeiro é chamado GetHashCode para determinar a caixa (bucket) onde o elemento será colocado. Ao procurar um elemento pela chave, também se calcula primeiro o código hash para encontrar rapidamente a caixa correta, e depois se chama Equals para uma comparação exata.

É importante que:

  • Se dois objetos são iguais (Equals retorna true), então seus GetHashCode devem retornar o mesmo valor.
  • Códigos hash bem distribuídos reduzem colisões e aumentam o desempenho.

Exemplo de sobrescrita:

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