Sobes.tech
Junior — Middle

O que acontece se inserir num HashMap duas chaves com o mesmo código de hash, mas valores diferentes segundo equals?

sobes.tech IA

Resposta da IA

No HashMap em Java, as chaves são armazenadas em buckets indexados pelo código de hash. Se duas chaves têm o mesmo código de hash, elas caem no mesmo bucket, mas para determinar a unicidade, o método equals é usado.

Se inserir duas chaves com o mesmo código de hash, mas que não são iguais segundo equals, o HashMap irá guardar ambas as chaves como entradas diferentes no mesmo bucket.

Exemplo:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, mas !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

Portanto, o mesmo código de hash não significa chaves iguais. O HashMap primeiro procura no bucket pelo hash, e depois compara as chaves usando equals. Se equals retornar false, a chave é considerada nova e é adicionada à coleção.