Maison  >  Article  >  Java  >  Explication détaillée d'exemples de traversée HashMap et d'utilisation en Java

Explication détaillée d'exemples de traversée HashMap et d'utilisation en Java

黄舟
黄舟original
2017-08-09 09:29:151429parcourir

Plusieurs méthodes de parcours de map :

Map< String, String> map = new HashMap<>();

   map.put("aa", "@sohu.com");

   map.put("bb","@163.com");

   map.put("cc", "@sina.com");

   System.out.println("普通的遍历方法,通过Map.keySet遍历key和value");//普通使用,二次取值

   for (String key : map.keySet()) {

       System.out.println("key= "+key+" and value= "+map.get(key));

   }

   System.out.println("通过Map.entrySet使用iterator遍历key和value:");

   Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

   while(it.hasNext()){

       Map.Entry<String, String> entry = it.next();

       System.out.println("key= "+entry.getKey()+" and value= "+entry.getValue());

   }

   System.out.println("通过Map.entrySet遍历key和value");    //推荐这种,特别是容量大的时候

   for(Map.Entry<String, String> entry : map.entrySet()){

       System.out.println("key= "+entry.getKey()+" and value= "+entry.getValue());

   }
  System.out.println(“通过Map.values()遍历所有的value,但不能遍历key”);

   for(String v : map.values()){

       System.out.println("value = "+v);

   }

La connexion et la différence entre HashMap et Hashtable
Les principes de mise en œuvre sont les mêmes et les fonctions sont les mêmes, la couche inférieure est une structure de table de hachage, la vitesse de requête est rapide et elle peut être interopérée dans de nombreux cas. Les premières versions sont généralement sûres.

  • HashMap et Hashtable implémentent tous deux l'interface Map, mais avant de décider laquelle utiliser, vous devez d'abord comprendre la différence entre eux. Les principales différences sont : la sécurité des threads, la synchronisation et la vitesse.

  • HashMap est presque équivalent à Hashtable, sauf que HashMap n'est pas synchronisé et peut accepter null (HashMap peut accepter une clé et une valeur nulles, tandis que Hashtable sinon).

  • HashMap n'est pas synchronisé, tandis que Hashtable est synchronisé, ce qui signifie que Hashtable est thread-safe et que plusieurs threads peuvent partager une Hashtable s'il n'y a pas de synchronisation correcte, plusieurs threads sont HashMap ; ne peut pas être partagé. Java 5 fournit ConcurrentHashMap, qui remplace HashTable et offre une meilleure évolutivité que HashTable.

  • Une autre différence est que l'itérateur de HashMap (Iterator) est un itérateur à échec rapide, tandis que l'itérateur énumérateur de Hashtable n'est pas à échec rapide. Ainsi, lorsque d'autres threads modifient la structure du HashMap (ajoutent ou suppriment des éléments), une ConcurrentModificationException sera levée, mais la méthode remove() de l'itérateur lui-même ne lancera pas de ConcurrentModificationException lors de la suppression d'éléments. Mais ce n'est pas un comportement garanti, cela dépend de la JVM. C'est aussi la différence entre Enumeration et Iterator.

  • Étant donné que Hashtable est thread-safe et synchronisé, il est plus lent que HashMap dans un environnement monothread. Si vous n'avez pas besoin de synchronisation et n'avez besoin que d'un seul thread, l'utilisation de HashMap fonctionnera mieux que Hashtable.
    HashMap ne peut pas garantir que l'ordre des éléments dans la carte restera inchangé au fil du temps.


Caractéristiques de hashmap
HashMap est une sous-classe de l'interface cartographique et est un objet qui mappe les clés aux valeurs, où les clés et les valeurs ​​sont des objets qui ne sont pas thread-safe
hashMap utilise une table de hachage pour stocker les clés de carte
la clé est non ordonnée et unique, et peut avoir une valeur nulle
est non ordonnée et non unique, et peut avoir des paires de valeurs nulles
linkedHashMap Utilisez une table de hachage pour stocker les clés dans la carte, et utilisez une liste liée doublement chaînée pour gérer la commande

  • Ce que nous utilisons le plus est HashMap Pour insérer, supprimer. et localisez des éléments dans Map, HashMap est le meilleur choix. Si vous avez besoin que l'ordre de sortie soit le même que l'ordre d'entrée, vous pouvez utiliser LinkedHashMap. Il peut également être organisé dans l'ordre de lecture

  • HashMap est la carte la plus couramment utilisée. qui est basé sur la clé. La valeur hashCode stocke les données et sa valeur peut être obtenue directement en fonction de la clé, qui a une vitesse d'accès rapide. HashMap permet uniquement à la clé d'un enregistrement d'être NULL et à la valeur de plusieurs enregistrements d'être NULL. HashMap ne prend pas en charge la synchronisation des threads, c'est-à-dire que plusieurs threads peuvent écrire HashMap en même temps à tout moment, ce qui peut entraîner une incohérence des données.

  • Si une synchronisation est requise, vous pouvez utiliser la méthode synchroniséeMap de Collections pour synchroniser HashMap. LinkedHashMap enregistre l'ordre d'insertion des enregistrements Lorsque vous utilisez Iterator pour parcourir LinkedHashMap, l'enregistrement obtenu en premier doit être inséré en premier.

HashMap peut être synchronisé via l'instruction suivante :

Map m = Collections.synchronizeMap(hashMap);

Comparaison de l'efficacité de plusieurs collections couramment utilisées
Explication détaillée dexemples de traversée HashMap et dutilisation en Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en 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