Quand dois-je utiliser une table de hachage par rapport à une table de hachage
Ce n'est pas une question sur les différences entre les je comprends que l' Hashtable
et HashMap
.Hashtable
objet ne peut pas accepter null
valeurs pour la clé ou la valeur des entrées, qu'il est synchronisé collection, et qu'il utilise un peu moins de mémoire qu'un HashMap
.
Je m'interroge sur les scénarios où il serait plus approprié d'utiliser un Hashtable
au lieu d'un HashMap
.
- double de stackoverflow.com/questions/40471/...
- Ce n'est pas un doublon de cette question. Cette question dépasse les différences. Je sais que les différences. Je parle de quand il est approprié d'utiliser l'un sur l'autre.
Vous devez vous connecter pour publier un commentaire.
Eh bien, c'est vraiment...
Précisément quand vous voulez les différences entre les deux:
Collections.synchronizedMap
sur uneHashMap
Hashtable
(assez rare, heureusement)Je ne me souviens pas la dernière fois que j'ai été dans cette situation, personnellement je dirais que c'est extrêmement rare pour être approprié d'utiliser
Hashtable
moderne de code Java.Hashtable
serait plus utile qu'unHashMap
. Merci pour l'énumération de tous les différents scénarios!Hashtable
quand vous avez une API qui exige, dans tous les autres cas, vous pouvez utiliserHashMap
ouCollections.synchronizedMap(new HashMap())
Jamais.
Hashtable était à l'origine de la mise en œuvre d'une carte en Java 1. Il a été dépassé par la Carte implémentations. Bien sûr, la table de hachage a été adapté pour correspondre, mais ce n'est pas très utile.
Il a le principal problème en ce qu'il est synchronisé. Cela signifie qu'il sera lente dans toutes les circonstances où il est partagé entre les threads. ConcurrentHashMap est un meilleur choix dans cette situation. Si vous êtes en cours d'exécution sur un seul thread puis l'onu-synchronisé HashMap est un meilleur choix.
Je peux penser qu'à une seule raison valable - lorsque vous êtes en utilisant une API qui exige, par exemple JNDI est extrêmement irritant
InitialContext
de la classe.Autre que cela, je ne vois aucune bonne raison de l'utiliser
Hashtable
à tous. Vous pouvez obtenir une version synchronisée deHashMap
en utilisantCollections.synchronizedMap
.Je ne vois que des tables de hachage dans les applications existantes/les bibliothèques.
Si vous le pouvez, utilisez ConcurrentHashMap ou des Collections.synchronizedMap si vous avez besoin d'un synchronisé Carte.
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#synchronizedMap%28java.util.Map%29
Savoir quand utiliser une classe ou d'une structure sur une autre est en fait la compréhension des différences entre les deux, et à décider lequel convient le mieux au problème, en fonction de ces différences.
Donc dans la situation où vous avez besoin de stocker des valeurs null, un
Hashtable
ne serait pas approprié.Aussi, dans un
Hashtable
, l'énumération n'est pas sécurisé. Donc, si vous devez être en mesure de modifier le contenu de la structure lors de l'énumération, uneHashtable
serait plus approprié.