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