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éthodeequals(). Cela signifie que deux objets différents, même s'ils sont "égaux" selon leur méthodeequals(), seront considérés comme des clés différentes dansIdentityHashMaps'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.