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étodoequals(). Isso significa que dois objetos diferentes, mesmo que sejam "iguais" de acordo com seu métodoequals(), serão considerados chaves diferentes noIdentityHashMapse 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.