63 votes

Cas d'utilisation pour IdentityHashMap

Est-ce que quelqu'un pourrait nous dire quels sont les cas d'utilisation importants de IdentityHashMap ?

40voto

Beni Points 2866

Chaque fois que vous souhaitez que vos clés ne soient pas comparées de equals mais de == vous utiliseriez une carte IdentityHashMap. Cela peut être très utile si vous manipulez beaucoup de références, mais il est limité à des cas très particuliers.

29voto

sris Points 3040

La documentation dit:

Une utilisation typique de cette classe est la topologie de la préservation de l'objet graphique des transformations, telles que la sérialisation ou profonde de la copie. Pour effectuer une telle de transformation, un programme doit maintenir un "nœud de la table" qui permet d' la trace de toutes les références d'objet qui ont déjà été traitées. L' tableau nœud ne doit pas assimiler distinctes les objets même s'ils se trouvent être de l'égalité. Un autre exemple d'utilisation de cette la classe est de maintenir des objets proxy. Par exemple, une fonction de débogage pourrait souhaitent maintenir un objet proxy pour chaque objet dans le programme débogué.

25voto

NateS Points 1528

Vous pouvez utiliser IdentityHashMap si vos clés sont des objets de classe. C'est environ 33% plus rapide que HashMap for gets! Il utilise probablement moins de mémoire aussi.

18voto

Eli Points 1997

HashMap crée Entrée objets chaque fois que vous ajoutez un objet, ce qui peut mettre beaucoup de stress sur la table quand vous avez beaucoup d'objets. Dans une table de hachage avec 1 000 objets ou plus, vous finirez en utilisant une bonne partie de votre CPU un peu d'avoir le GC nettoyer les entrées (dans des situations comme pathfinding ou d'autres one-shot collections qui sont créés et nettoyé). IdentityHashMap n'ont pas ce problème, alors, finissent par être beaucoup plus rapide.

Voir une référence ici: http://www.javagaming.org/index.php/topic,21395.0/topicseen.html

13voto

rfang Points 99

C'est une expérience pratique de ma part:

IdentityHashMap laisse une empreinte mémoire beaucoup plus petite que HashMap pour les grandes cardinalités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X