web-dev-qa-db-fra.com

Quand devrais-je utiliser une hache par rapport à un hashmap

Ce n'est pas une question sur les différences entre Hashtable et HashMap. Je comprends qu'un objet Hashtable ne peut pas accepter les valeurs null pour les entrées de la clé ou de la valeur, qu'il s'agit de la collecte synchronisée et qu'elle utilise un peu moins de mémoire qu'un HashMap.

Je me demande sur les scénarios où il serait plus approprié d'utiliser un Hashtable au lieu d'un HashMap.

27
Vivin Paliath

Ce n'est pas une question sur les différences entre Hashtable et HashMap

Eh bien c'est vraiment ...

Je me demande sur les scénarios où il serait plus approprié d'utiliser un Hashtable au lieu d'un HashMap.

Précisément lorsque vous voulez les différences entre les deux:

  • Lorsque vous souhaitez exécuter sur Java 1.1
  • Lorsque vous souhaitez que chaque opération soit synchronisée (vous obtenez un -formulaire de sécurité de thread, tant que vous ne l'avez jamais itérale) - et pour une raison quelconque, vous ne voulez pas utiliser Collections.synchronizedMap sur un HashMap
  • Lorsque vous ne voulez pas pouvoir stocker des valeurs null
  • Lorsque la différence de mémoire est en réalité significative (seulement après avoir été prouvée C'est le cas) - Je n'étais même pas au courant de cette différence, personnellement ...
  • Lorsque vous êtes obligé de passer par une API NASTY qui retourne ou prend Hashtable (relativement rare, heureusement)

Je ne me souviens pas de la dernière fois que j'étais dans cette situation, personnellement, je dirais qu'il est trop rare d'être approprié d'utiliser Hashtable dans modern Java Code.

27
Jon Skeet

Jamais. Hashtable était la mise en œuvre initiale d'une carte dans Java 1. Il a été dépassé par les implémentations de la carte. Bien sûr, Hashable a été installé pour correspondre mais ce n'est pas terriblement utile.

Il a le principal problème en ce que c'est synchronisé. Cela signifie qu'il sera lent dans toutes les circonstances où il est partagé entre les threads. ConcourshashMap est un meilleur choix dans cette situation. Si vous exécutez sur un seul thread, le hashmap non synchronisé est un meilleur choix.

14
Sarge

Savoir quand utiliser une classe ou une structure sur une autre comprendre essentiellement les différences entre les deux et décider que l'on convient le mieux au problème en fonction de ces différences.

Je comprends qu'un objet Hashtable ne peut pas accepter les valeurs NULL

Donc, dans la situation où vous devez stocker des valeurs null, un Hashtable ne serait pas approprié.

En outre, dans un Hashtable, l'énumération n'est pas sûre. Donc, si vous devez être en mesure de modifier le contenu de la structure pendant l'énumération, un Hashtable serait plus approprié.

1
Michael Hornfeck