Sobes.tech
Junior — Middle

Como a alteração da chave afeta a estrutura e o comportamento do HashMap em Java?

sobes.tech IA

Resposta da IA

No HashMap, as chaves são usadas para calcular o hash e determinar a posição do elemento na estrutura interna (bucket). Se o objeto usado como chave for alterado de modo que seu hash ou o resultado do método equals() mude, isso quebrará o funcionamento do HashMap.

Por quê?

  • Ao adicionar um elemento, a chave é hasheada, e o elemento é colocado em um bucket específico.
  • Ao procurar um elemento pela chave, o HashMap calcula o hash e busca no bucket correspondente.

Se a chave mudar após a adição, ao procurar com a nova chave, um hash diferente será calculado e o elemento não será encontrado — ele será "perdido" no mapa.

Por isso, as chaves no HashMap devem ser imutáveis ou não mudar enquanto estiverem sendo usadas como chaves.

Exemplo do problema:

class Key {
    int id;
    Key(int id) { this.id = id; }
    public int hashCode() { return id; }
    public boolean equals(Object o) { return o instanceof Key && ((Key)o).id == id; }
}

Key key = new Key(1);
HashMap<Key, String> map = new HashMap<>();
map.put(key, "value");

key.id = 2; // chave alterada

System.out.println(map.get(key)); // null, pois a chave "se perdeu"