9
votes

Utilisation pratique de IdentityHashMap à Java 6

Dupliqué possible:
Utilisez des cas pour identityHashMap

Qu'est-ce qui pourrait être une utilisation pratique de l'IdentityHashMap introduit dans Java 5?


1 commentaires

Je pense que cette question a été posée avant ... Stackoverflow. com / questions / 838528 / ...


4 Réponses :



2
votes

Lors de la diffusion d'objets mutables que vous souhaitez garder une trace des objets que vous avez sérialisé et leur identifiant de référence. Vous ne pouvez pas utiliser l'égalité comme vous ne pouvez pas faire confiance à des objets mutables pour utiliser des chèques d'identité pour des égaux et pour ne pas changer. par exemple. La date est mutable et des égaux compare le contenu.


0 commentaires


4
votes

pour ajouter des champs dynamiques aux objets.

Certaines langues prennent directement en charge les champs dynamiques: Tout le monde peut ajouter n'importe quel champ à n'importe quel objet.

Ceci est pratique lorsque vous souhaitez associer des informations aux objets, impeccent par des concepteurs d'objets.

Java n'a pas de réel champ dynamique. Nous pouvons la simuler en utilisant une carte d'identité pour associer un objet à certaines informations.

faiblesHashMap est meilleur à cet effet; C'est aussi une carte d'identité et elle n'ajoute pas une référence supplémentaire forte à l'objet. Il est donc beaucoup plus proche du concept de champ dynamique.

La concurrence est le problème restant. Si deux threads accédant au même domaine dynamique de deux objets différents, il ne devrait pas y avoir de dépendances entre deux threads. Nous pouvons le résoudre par une sorte de hashmap faible simultané. Cependant, la performance n'est pas idéale par rapport à l'accès normal sur le terrain.

penser à java.lang.threadlocal , ajout de champ dynamique aux threads; et java.lang.classvalue , ajout de champ dynamique aux classes. Ils ne sont pas strictement nécessaires - nous pouvons obtenir la même chose avec des cartes faibles simultanées. Ils existent pour la raison de la performance. JDK peut "pirater" dans le fil / la classe pour ajouter des supports pour atteindre une recherche plus rapide.


2 commentaires

Rondover indique que faiblesHashmap "est également une carte d'identité". Ce n'est pas le cas - en fait de bug 4500542 dans les bugs Java DB Ils reconnaissent que cela aurait probablement dû être un mais n'est pas. Pour une identité faible HASHMAP, voir le Javadoc pour la classe de cartes Guava (le bit sur Nouveau MapMaker (). Makemap (). Makemap () ).


Je vous suggère de modifier votre réponse pour réparer la faille affichée dans le commentaire par Hawkins.