Concernant les quatre manières spécifiques de parcourir une carte en Java, veuillez consulter l'explication détaillée ci-dessous.
Méthode 1 Il s'agit de la méthode de traversée la plus courante et, dans la plupart des cas, la plus souhaitable. Utilisé lorsque la clé et la valeur sont requises.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entrée : map.entrySet()) { System.out.println("Key = " + entrée. getKey() + ", Value = " + Entry.getValue() );
La méthode 2 parcourt les clés ou les valeurs dans une boucle for-each.
Si vous n'avez besoin que des clés ou des valeurs dans la carte, vous pouvez parcourir keySet ou les valeurs au lieu d'utiliser EntrySet.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //Parcourir les clés dans la carte pour (Integer key : map.keySet()) { System.out.println("Key = " + key ) ; } //Parcourez les valeurs dans la carte pour (Integer value : map.values()) { System.out.println("Value = " + value);
Cette méthode a des performances légèrement meilleures que le parcours EntrySet (10 % plus rapide) et le code est plus propre.
La troisième méthode utilise Iterator pour parcourir
Utiliser des génériques :
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entrées = map.entrySet().iterator(); Map.Entry<Integer, Integer> entrée = entrées.next(); System.out.println("Key = " + Entry.getKey() + ", Valeur = " + entrée.getValue());
Sans utiliser de génériques :
Map map = new HashMap(); Entrées d'itérateur = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry Entry = (Map.Entry) Entrys.next(); Entier)entry.getKey(); Valeur entière = (Entier)entry.getValue(); System.out.println("Clé = " + clé + ", Valeur = " + valeur); }
Vous pouvez également appliquer la même approche aux keySets et aux valeurs.
Cette approche semble redondante mais présente des avantages. Tout d’abord, c’est le seul moyen de parcourir une carte dans les anciennes versions de Java. Un autre avantage est que vous pouvez appeler iterator.remove() pour supprimer les entrées lors du parcours, ce que les deux autres méthodes ne peuvent pas. Selon le javadoc, si vous essayez d'utiliser cette méthode dans un parcours for-each, les résultats sont imprévisibles.
Du point de vue des performances, cette méthode est similaire aux performances du parcours for-each (c'est-à-dire la méthode 2).
Méthode 4 : Parcourir en recherchant des valeurs par clé (faible efficacité)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Valeur entière = map.get(key); + clé + ", Valeur = " + valeur);
Comme alternative à la première méthode, ce code semble plus propre ; mais il est en réalité assez lent et inefficace. Parce qu'obtenir la valeur de la clé est une opération qui prend du temps (par rapport à la méthode 1, cette méthode est 20 à 200 % plus lente dans différentes implémentations de Map). Si FindBugs est installé, il vérifiera et vous avertira des traversées inefficaces. Essayez donc d’éviter de l’utiliser.
Résumer
Si vous n’avez besoin que de clés ou de valeurs, utilisez la deuxième méthode. Si la version linguistique que vous utilisez est inférieure à Java 5 ou si vous envisagez de supprimer des entrées pendant le parcours, vous devez utiliser la troisième méthode. Sinon, utilisez la première méthode (à la fois clé et valeur).