Sobes.tech
Middle+

Quelle est la différence entre HashMap et IdentityHashMap?

sobes.tech IA

Réponse de l'IA

La principale différence réside dans la façon dont ils comparent les clés.

  • HashMap utilise la méthode equals() et le code de hachage de la clé pour déterminer l'égalité, ce qui correspond à la sémantique standard de l'égalité des objets.
  • IdentityHashMap compare les clés strictement par référence (en utilisant ==), ignorant la méthode equals(). Cela signifie que deux objets différents, même s'ils sont "égaux" selon leur méthode equals(), seront considérés comme des clés différentes dans IdentityHashMap s'ils ont des adresses mémoire différentes.

Exemple:

// HashMap
Object key1 = new String(" clé");
Object key2 = new String(" clé");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "valeur 1");
hashMap.put(key2, "valeur 2"); // écrasera la valeur pour " clé"

// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "valeur 1");
identityHashMap.put(key2, "valeur 2"); // ajoutera une deuxième entrée, car key1 != key2 par référence

Utilisé moins fréquemment, par exemple:

  • Lors de la sérialisation/désérialisation, lorsque l'identité des objets est importante dans un même graphe d'objets.
  • Dans certains algorithmes spécifiques où il est nécessaire de distinguer les objets par leur identité plutôt que par leur équivalence logique.
  • Pour détecter des références cycliques.