Sobes.tech
Junior — Middle

Quais as consequências de usar um objeto que pode ser alterado como chave numa tabela hash?

sobes.tech IA

Resposta da IA

Se usar um objeto mutável como chave numa tabela hash (por exemplo, em HashMap em Java), isso pode causar problemas graves:

  • Violação da integridade da tabela hash: A tabela hash calcula a posição da chave com base no seu código hash. Se o objeto mudar após ser adicionado, o seu código hash pode mudar, e ao procurar a chave, o objeto já não será encontrado.

  • Perda de acesso aos elementos: Mesmo que o objeto esteja presente na tabela, tentar obter o valor com uma chave alterada retornará null, pois a chave não corresponde em código hash ou equals.

  • Comportamento imprevisível: Isto pode levar a bugs difíceis de detectar, especialmente se as chaves mudarem durante a execução do programa.

Recomendações:

  • Usar objetos imutáveis como chaves.
  • Se o objeto deve ser mutável, não usá-lo como chave.

Exemplo:

class MutableKey {
    int id;
    public int hashCode() { return id; }
    public boolean equals(Object o) { /* comparação por id */ }
}

MutableKey key = new MutableKey();
key.id = 1;
map.put(key, "valor");
key.id = 2; // agora a chave não será encontrada na map
String val = map.get(key); // retornará null