Différence entre HashMap et Hashtable en Java

Auteur: Laura McKinney
Date De Création: 2 Avril 2021
Date De Mise À Jour: 5 Peut 2024
Anonim
Différence entre HashMap et Hashtable en Java - La Technologie
Différence entre HashMap et Hashtable en Java - La Technologie

Contenu


HashMap et Hashtable, les deux sont utilisés pour représenter un groupe d'objets qui sont représentés dans paire. Chaque la paire s'appelle Entrée objet. le collection of Entries est référencé par l'objet de HashMap et Hashtable. Les clés d'une collection doivent être uniques ou distinctives. La différence entre HashMap et Hashtable est que HashMap implémente particulièrement l'interface Map alors que, Hashtable étend la classe Dictionary (classe héritée) qui est reconfigurée pour implémenter l'interface Map. L’autre différence importante est que les objets de HashMap sont non synchronisé alors que les objets de Hashtable sont synchronisé.

Regardons le tableau de comparaison ci-dessous pour en savoir plus sur les différences entre HashMap et Hashtable.


  1. Tableau de comparaison
  2. Définition
  3. Différences Clés
  4. Similitudes
  5. Conclusion

Tableau de comparaison

Base de comparaisonHashMapHashtable
Implémenter / ÉtendreLa classe HashMap implémente l'interface Map et étend une classe AbstractMap.Hashtable étend la classe Dictionary Legacy mais, il a été repensé et implémente désormais l'interface Map.
SynchronisationHashMap n'est pas synchronisé et, par conséquent, l'objet HashMap n'est pas threaded safe.Hashtable est synchronisé et l'objet de Hashtable est donc thread-safe.
Clés / ValeurUne clé ne peut renvoyer Null qu'une seule fois, mais une valeur peut renvoyer Null n'importe quel nombre de fois.Une clé ne peut pas renvoyer Null car elle est utilisée pour obtenir le code de hachage qui servira d'index de la table de hachage. Aucune valeur ne peut renvoyer Null.
Capacité initiale par défautLa capacité initiale par défaut de HashMap est de 16.La capacité initiale par défaut de Hashtable est 11.
TraverserHashMap est traversé par Iterator.Comme la classe Map, Hashtable ne prend pas non plus en charge directement Iterator pour le parcours et utilise donc Enumerator.


Définition de HashMap

HashMap est une classe qui implémente le Carte interface et étend la Carte abstraite La classe utilise la table de hachage. L’objet de HashMap fait référence à une collection / un ensemble de paire où chaque clé est mappée à une valeur particulière. Les clés d'une collection doivent être uniques car elles sont utilisées pour extraire la valeur. D'autre part, les valeurs d'une collection peuvent être dupliquées. La déclaration de la classe HashMap et les constructeurs de la classe HashMap sont les suivants:

/ * K représente la clé et V représente la valeur * / class HashMap / * Constructeurs de la classe HashMap * / HashMap () HashMap (Carte <? Étend K,? Étend V> m) HashMap (capacité interne) HashMap (capacité interne, valeur de remplissage float)

Le premier constructeur est un constructeur par défaut qui initialise un objet vide de HashMap avec une capacité par défaut de 16 et un taux de remplissage par défaut de 0,75. Le second constructeur initialise la carte de hachage avec la valeur de m. Le troisième constructeur crée une carte de hachage avec la capacité initiale correspondant à la valeur fournie dans l'argument «capacité». Le quatrième constructeur initialise la carte de hachage avec une capacité et un taux de remplissage fournis dans les paramètres. Voyons maintenant comment alimenter les entrées dans une carte de hachage.

Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * sortie * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

Dans le code ci-dessus, vous pouvez voir que j'ai créé un objet HashMap vide hm avec capacité initiale et taux de remplissage par défaut. Ensuite, j'ai inséré quatre entrées dans la carte de hachage en utilisant la méthode put (K, V) qui mappe la clé sur la valeur. Vous pouvez constater que les entrées ne sont pas éditées dans l'ordre que vous leur donnez car l'ordre d'insertion n'est pas fixe. Maintenant, considérons un cas pour lequel vous avez déjà une entrée dans la carte de hachage et après avoir essayé d’insérer put (K1, V5), c’est-à-dire que vous essayez de mapper la même clé avec une valeur différente. Ensuite, la méthode put remplacera l’ancienne valeur V1 par la nouvelle valeur V2 et renverra l’ancienne valeurV1; sinon, si nous n’essayons jamais de remplacer une valeur de clé, la méthode put renvoie Null pour cette clé.

Définition de Hashtable

Hashtable est une classe qui étend la dictionnaire classe qui est une classe d'héritage et est réorganisée pour mettre en œuvre la Carte interface. La table de hachage utilise la table de hachage comme structure de données. Hashtable est similaire à HashMap car ici aussi l'objet de Hashtable fait référence à la collection d'entrées où chaque entrée est une paire de . Toutes les clés d'une collection doivent être uniques, les valeurs peuvent être dupliquées. Les clés sont particulièrement utilisées pour obtenir la valeur de code de hachage qui détermine l’index, où le La paire sera stockée dans une table de hachage. Dans une table de hachage, ni une clé ni une valeur ne peut renvoyer le pointeur Null. Voyons la déclaration de la classe Hashtable et les constructeurs de la classe hashtable.

/ * K spécifie la clé et V spécifie la valeur associée à la clé * / class Hashtable / * constructeurs de Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? étend K,? étend V> m)

Dans le code ci-dessus, le premier constructeur est un constructeur par défaut qui crée un objet vide d'une classe Hashtable, sa taille par défaut est 11 et le taux de remplissage par défaut est 0,75. Le second constructeur crée une table de hachage dont la taille correspond à la valeur fournie dans le paramètre «size». Le troisième constructeur crée une table de hachage avec une taille et un taux de remplissage fournis dans le paramètre. Le quatrième constructeur initialise la table de hachage avec la valeur m. Voyons maintenant comment insérer le paire dans la table de hachage.

Hashtable ht = new Hashtable (); ht.put (new hashCode (2), 275); ht.put (nouveau hashCode (12), 250); ht.put (nouveau hashCode (16), 150); ht.put (new hashCode (8), 200); System.out.ln (ht); / * sortie * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Dans le code ci-dessus, j'ai créé un objet vide de Hashtable et inséré quatre entrées à l'aide de la méthode put (). A l'intérieur de la méthode de vente, j'ai appelé hashCode (), qui calcule et renvoie la valeur de code de hachage qui fera office d'index pour l'objet entry. Comme vous pouvez le constater, je n’ai pas mentionné la taille de la table de hachage; elle sera donc 11 par défaut. Ici aussi, l’ordre d’insertion n’est pas préservé et, par conséquent, lorsque les entrées ed ne sont pas affichées dans l’ordre où elles ont été alimentées.

  1. Les outils HashMap Carte interface et étend une classe abstraite, Carte abstraite alors que la table de hachage étend la classe abstraite dictionnaire, qui est aussi une classe Legacy, réorganisée plus tard pour implémenter Carte interface.
  2. L'objet HashMap est non synchronisé c'est-à-dire que plusieurs threads peuvent fonctionner en même temps et que, par conséquent, les objets ne sont pas thread-safe. D'autre part, les objets de Hashtable sont synchronisé C'est-à-dire que si un thread veut opérer sur un objet de Hashtable, il doit acquérir un verrou sur cet objet afin qu'aucun autre thread ne puisse accéder à cet objet et qu'il soit donc thread-safe.
  3. Dans HashMap clé peut retourner Null seulement une fois, et la valeur peut retourner Null plusieurs fois. Par ailleurs, une clé ne peut jamais renvoyer Null car elle permettait d’obtenir la valeur de code de hachage utilisée comme index pour stocker le fichier. paire et ni une valeur peut retourner Null.
  4. La capacité par défaut d'une table de hachage dans la classe HashMap est 16 alors que la capacité par défaut d'une table de hachage dans Hashtable est 11.
  5. le Itérateur peut traverser les entrées de Hashmap. D'autre part, le Hashtable ne supporte pas directement l'Iterator et donc, généralement Enumérateur est utilisé pour parcourir les entrées dans Hashtable.

Similitudes:

  • HashMap et Hashtable utilisent tous deux la structure de données du table de hachage.
  • HashMap et Hashtable implémentent tous les deux Carte interface
  • L'ordre d'insertion n'est pas préservé dans HashMap et Hashtable et sur la base du code de hachage obtenu à l'aide des clés.
  • Dans HashMap et Hashtable, les clés doivent être unique alors que les valeurs peuvent être dupliqué.
  • HashMap et Hashtable peuvent tous deux contenir objets hétérogènes pour les clés et les valeurs.
  • HashMap et Hashtable, les deux implémentent Sérialisable et Clonable interfaces mais pas d'accès aléatoire.
  • HashMap et Hashtable ont tous deux un taux de remplissage par défaut 0.75.
  • HashMap et Hashtable sont les meilleurs pour la récupération ou recherche opérations.

Conclusion:

HashMap offre de meilleures performances, car ses objets ne sont pas synchronisés et que plusieurs threads peuvent y fonctionner simultanément. Par conséquent, il est plus rapide que Hashtable.