Sobes.tech
Middle+

Qual é a diferença entre HashMap e IdentityHashMap?

sobes.tech IA

Resposta da IA

A principal diferença está na forma como eles comparam as chaves.

  • HashMap usa o método equals() e o código hash da chave para determinar a igualdade, o que corresponde à semântica padrão de igualdade de objetos.
  • IdentityHashMap compara as chaves estritamente por referência (usando ==), ignorando o método equals(). Isso significa que dois objetos diferentes, mesmo que sejam "iguais" de acordo com seu método equals(), serão considerados chaves diferentes no IdentityHashMap se tiverem endereços de memória diferentes.

Exemplo:

// HashMap
Object key1 = new String(" chave");
Object key2 = new String(" chave");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "valor 1");
hashMap.put(key2, "valor 2"); // sobrescreve o valor para " chave"

// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "valor 1");
identityHashMap.put(key2, "valor 2"); // adiciona uma segunda entrada, pois key1 != key2 por referência

Usado com menos frequência, por exemplo:

  • Durante a serialização/deserialização, quando a identidade dos objetos é importante dentro de um mesmo grafo de objetos.
  • Em alguns algoritmos específicos onde é necessário distinguir objetos por sua identidade e não por sua equivalência lógica.
  • Para detectar ligações cíclicas.