Maison Java javaDidacticiel Une brève analyse des différences entre Map et HashMap, Hashtable et HashSet en Java

Une brève analyse des différences entre Map et HashMap, Hashtable et HashSet en Java

Jan 19, 2017 am 10:29 AM

La différence entre HashTable et HashMap

Premièrement, les classes parents héritées sont différentes.
Hashtable hérite de la classe Dictionary et HashMap hérite de la classe AbstractMap. Mais les deux implémentent l’interface Map.

public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
Copier après la connexion


Deuxièmement, la sécurité des threads est différente.
Les méthodes de Hashtable sont synchronisées, tandis que les méthodes de HashMap ne sont pas synchronisées par défaut. Dans un environnement simultané multithread, vous pouvez utiliser Hashtable directement sans synchroniser vous-même ses méthodes. Cependant, lorsque vous utilisez HashMap, vous devez ajouter vous-même le traitement de synchronisation.


Troisièmement, faut-il fournir la méthode contain ?
HashMap a supprimé la méthode contain de Hashtable et l'a modifiée en containValue et containKey, car la méthode contain est facile à provoquer. malentendu.

Hashtable conserve trois méthodes : contain, containValue et containKey, parmi lesquelles contain et containValue ont les mêmes fonctions.

Quatrièmement, si la clé et la valeur autorisent les valeurs nulles.
La clé et la valeur sont toutes deux des objets et ne peuvent pas contenir de clés en double, mais peuvent contenir des valeurs en double.
Dans Hashtable, les valeurs nulles ne sont pas autorisées dans la clé et la valeur.
Dans HashMap, null peut être utilisé comme clé, et il n'y a qu'une seule clé de ce type ; il peut y avoir une ou plusieurs clés dont la valeur correspondante est nulle. Lorsque la méthode get() renvoie une valeur nulle, il se peut que la clé n'existe pas dans le HashMap, ou que la valeur correspondant à la clé soit nulle. Par conséquent, dans HashMap, la méthode get() ne peut pas être utilisée pour déterminer si une certaine clé existe dans HashMap, mais la méthode containKey() doit être utilisée pour le déterminer.

Cinquièmement, l'implémentation interne des deux méthodes de traversée est différente.
Hashtable et HashMap utilisent tous deux Iterator. Pour des raisons historiques, Hashtable utilise également l'énumération.

Sixièmement, les valeurs de hachage sont différentes.
L'utilisation des valeurs de hachage est différente. HashTable utilise directement le hashCode de l'objet. Et HashMap recalcule la valeur de hachage.

Septièmement, l'implémentation interne utilise différentes méthodes d'initialisation et d'expansion du tableau.
La taille initiale et la méthode d'expansion des tableaux dans les deux implémentations internes de Hashtable et HashMap. La taille par défaut du tableau de hachage dans HashTable est de 11 et la méthode d'augmentation est old*2 1.

La taille par défaut du tableau de hachage dans HashMap est de 16, et il doit s'agir d'un exposant de 2.

Pour plus d'articles sur les différences entre Map et HashMap, Hashtable et HashSet en Java, veuillez faire attention au site Web PHP chinois !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Mar 17, 2025 pm 05:43 PM

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Mar 17, 2025 pm 05:46 PM

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

Mar 17, 2025 pm 05:45 PM

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

See all articles