La différence entre HashMap, Hashtable et HashSet en Java
Classe Hashtable
Hashtable hérite de l'interface Map et implémente une table de hachage de mappage clé-valeur. Tout objet non nul peut être utilisé comme clé ou valeur.
Pour ajouter des données, utilisez put(key,value), et pour supprimer des données, utilisez get(key). Le coût en temps de ces deux opérations de base est constant.
Hashtable ajuste les performances via deux paramètres : la capacité initiale et le facteur de charge. Habituellement, le facteur de charge par défaut de 0,75 permet d'obtenir un meilleur équilibre entre le temps et l'espace. L'augmentation du facteur de charge peut économiser de l'espace, mais le temps de recherche correspondant augmentera, ce qui affectera les opérations telles que l'extraction et la mise en place.
Un exemple simple d'utilisation de Hashtable est le suivant. Mettez 1, 2 et 3 dans Hashtable, et leurs clés sont respectivement "un", "deux" et "trois" :
Numéros de table de hachage = new Hashtable( );
numbers.put("un", new Integer(1));
numbers.put("deux", new Integer(2)); ”, new Integer(3));
Integer n = (Integer)numbers.get(« two »); System.out.println("two = " n);
Puisque l'objet en tant que clé déterminera la position de la valeur correspondante en calculant sa fonction de hachage, tout objet en tant que clé doit implémenter le hashCode et est égal à méthodes. Les méthodes hashCode et equals héritent de la classe racine Object. Si vous utilisez une classe personnalisée comme clé, soyez très prudent Selon la définition de la fonction de hachage, si les deux objets sont identiques, c'est-à-dire obj1.equals(. obj2)=true, alors leur hashCode doit être le même, mais si deux objets sont différents, leur hashCode n'est pas nécessairement différent. Si le hashCode de deux objets différents est le même, ce phénomène est appelé conflit. le temps nécessaire à l'exploitation de la table de hachage augmente. Par conséquent, essayez de définir une méthode hashCode() bien définie pour accélérer les opérations de la table de hachage.
Si le même objet a un hashCode différent, le fonctionnement de la table de hachage aura des résultats inattendus (la méthode get attendue renvoie null. Pour éviter ce problème, vous n'avez qu'à vous rappeler d'une chose : copier en même temps). time est égal à la méthode et à la méthode hashCode, au lieu de simplement en écrire une. La table de hachage est synchrone.
Classe HashMap
HashMap est similaire à Hashtable, sauf que HashMap est asynchrone et autorise null, c'est-à-dire une valeur nulle et une clé nulle. , mais lorsque l'on traite HashMap comme une collection (la méthode values() peut renvoyer une collection), la surcharge temporelle de ses sous-opérations d'itération est proportionnelle à la capacité du HashMap. Par conséquent, si les performances des opérations itératives sont très importantes, ne définissez pas la capacité initiale de HashMap trop élevée ni le facteur de charge trop bas.
Classe WeakHashMap
WeakHashMap est un HashMap amélioré, qui implémente des « références faibles » aux clés Si une clé n'est plus référencée en externe, la clé peut être recyclée par GC.
HashSet veuillez vous référer à la description de Set
Le constructeur de Set a une contrainte selon laquelle le paramètre Collection transmis ne peut pas contenir d'éléments en double.
Deux implémentations Set courantes sont HashSet et TreeSet. Décider lequel utiliser est assez simple. HashSet est beaucoup plus rapide (temps constant par rapport au temps de journalisation pour la plupart des opérations), mais ne fournit pas de garanties de commande. Si vous devez utiliser les opérations dans un SortedSet ou si l'itération séquentielle est importante pour vous, utilisez un TreeSet. Sinon, utilisez HashSet. C'est un pari raisonnable pour vous de ne pas utiliser de HashSet la plupart du temps.
Une chose que vous devez garder à l'esprit à propos de HashSet est que l'itération est linéaire en termes de somme du nombre d'entrées et de la capacité. Par conséquent, si les performances itératives sont importantes, une capacité initiale appropriée doit être choisie avec soin. Choisir une capacité trop grande gaspille à la fois de l’espace et du temps. La capacité initiale par défaut est de 101, ce qui est généralement supérieur à ce dont vous avez besoin. La capacité initiale peut être spécifiée à l'aide du constructeur int. La capacité initiale du HashSet à allouer est de 17 :
Set s= new HashSet(17);
Les HashSets ont également un "paramètre de réglage" appelé facteur de charge " . Si vous êtes très préoccupé par l'utilisation de l'espace de votre HashSet, lisez le texte du HashSet pour plus de détails. Sinon, utilisez simplement la valeur par défaut. Si vous acceptez le facteur de charge par défaut, mais que vous souhaitez spécifier une capacité initiale, choisissez un nombre qui est environ le double de la capacité à laquelle vous prévoyez que votre ensemble grandisse. Si votre estimation est erronée, elle peut s'agrandir ou simplement perdre un peu d'espace. Mais il n'y a pas de gros problèmes. Si vous connaissez la meilleure valeur pour la taille correcte, utilisez-la ; si vous ne la connaissez pas, utilisez une ancienne valeur ou utilisez une valeur paire. Ce n'est vraiment pas très important. Ces choses ne font que rendre HashSet légèrement meilleur.
TreeSet n'a aucun paramètre d'ajustement. En plus du clonage, HashSet et TreeSet n'ont que les opérations requises par leurs interfaces respectives (Set et TreeSet), et aucune autre opération.
Pour plus d'articles sur les différences entre HashMap, Hashtable et HashSet en Java, veuillez faire attention au site Web PHP chinois !

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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

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]

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.
