Maison  >  Article  >  Java  >  Explication détaillée de l'utilisation de Map en Java

Explication détaillée de l'utilisation de Map en Java

高洛峰
高洛峰original
2017-01-19 10:40:331389parcourir

Introduction à Map

Un objet qui mappe les clés aux valeurs. Une carte ne peut pas contenir de clés en double ; chaque clé ne peut être mappée qu'à une seule valeur au maximum. Cette interface remplace la classe Dictionary, qui est entièrement une classe abstraite plutôt qu'une interface.

 L'interface Map fournit trois vues de collection, vous permettant de visualiser le contenu d'une carte sous la forme d'un ensemble de clés, d'un ensemble de valeurs ou d'un ensemble de relations de mappage clé-valeur. L'ordre de mappage est défini comme l'ordre dans lequel un itérateur renvoie ses éléments sur une vue de collection mappée. Certaines implémentations de mappage peuvent explicitement garantir leur ordre, comme la classe TreeMap ; d'autres implémentations de mappage ne garantissent pas l'ordre, comme la classe HashMap.

Remarque : vous devez être prudent lorsque vous utilisez des objets mutables comme clés de carte. Lorsqu'un objet est une clé dans une carte, le comportement de la carte ne sera pas défini si la valeur de l'objet est modifiée d'une manière qui affecte les comparaisons égales. Un cas particulier de cette interdiction est l'interdiction pour une carte de se contenir en tant que clé. Bien qu'une map soit autorisée à se contenir sous forme de valeur, attention : les méthodes equals et hashCode ne sont plus bien définies sur une telle map.

Interface de la carte :

La carte fournit la clé du mappage des valeurs. Une Map ne peut pas contenir la même clé et chaque clé ne peut mapper qu’une seule valeur. L'interface Map propose trois types de vues d'ensemble. Le contenu de la carte peut être considéré comme un ensemble d'ensembles de clés, un ensemble d'ensembles de valeurs ou un ensemble de mappages clé-valeur. ​

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 la table de hachage, et leurs clés sont respectivement "un", "deux" et "trois" :

Hashtable numbers = new Hashtable(); 
numbers.put(“one”, new Integer(1)); 
numbers.put(“two”, new Integer(2)); 
numbers.put(“three”, new Integer(3));

Pour retirer un chiffre, tel que 2, utilisez la clé correspondante :

Integer n = (Integer)numbers.get(“two”); 
System.out.println(“two = ” + n);

Puisque l'objet comme clé sera être calculé en calculant sa fonction de hachage Déterminez la position de la valeur correspondante, donc tout objet utilisé comme clé doit implémenter les méthodes hashCode et equals. 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 une « référence faible » pour la clé. Si une clé n'est plus référencée en externe, alors la clé peut être recyclée. par GC.

Ce qui précède est une introduction à l'interface Java Map. Les étudiants qui apprennent la programmation Java peuvent s'y référer.

Pour des explications plus détaillées sur l'utilisation de Map en Java et des articles connexes, veuillez faire attention au site Web PHP chinois !


Déclaration:
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