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
HashMapcalcula 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"