2994 votes

Comment pour parcourir chaque entrée dans une carte ?

<p>Si j’ai un objet de mise en œuvre du <code></code> interface en Java et je voudrais itérer sur chaque paire qu’elle contenue, ce qui est le moyen le plus efficace de passer par la carte ?<p>L’ordre des éléments dépendra de la mise en œuvre d’une carte spécifique que j’ai pour l’interface ?</p></p>

4674voto

ScArcher2 Points 22118
<pre><code></code></pre>

263voto

Saint Hill Points 2285
<p>Dans Java 8 vous pouvez le faire propre et rapide comme ceci en utilisant les nouvelles fonctionnalités d’expressions lambda :<pre><code></code></pre><p>Le type K et V sera déduit par le compilateur et il n’y a pas besoin d’utiliser Map.Entry plus.</p><p>Easy-peasy !</p></p>

222voto

pkaeding Points 12935
<p>Oui, l’ordre dépend de l’implémentation spécifique de la carte.<p>@ScArcher2 a la syntaxe Java 1.5 plus élégante. En 1.4, je ferais quelque chose comme ceci :</p><pre><code></code></pre></p>

122voto

Typique code pour une itération sur une carte est:

Map<String,Thing> map = ...;
for (Map.Entry<String,Thing> entry : map.entrySet()) {
    String key = entry.getKey();
    Thing thing = entry.getValue();
    ...
}

HashMap est la forme canonique de la carte de mise en œuvre et ne fait pas de garantie (ou bien qu'il ne devrait pas changer l'ordre si aucune mutation de fonctionnement sont réalisées). SorterMap sera de retour les entrées sur la carte trie les clés. LinkedHashMap renvoie les entrées d'insertion ou d'accès d'ordre dépendant de la façon dont il a été construit. EnumMap renvoie les entrées dans l'ordre naturel des touches.

Remarque, IdentityHashMap entrySet itérateur actuellement a un particulier de mise en œuvre qui renvoie le même Map.Entry exemple pour chaque élément de l' entrySet! Cependant, chaque fois qu'une nouvelle l'itérateur progrès de l' Map.Entry est mis à jour.

91voto

serg10 Points 10157

C'est une deuxième partie de la question:

Comment itérer sur les entrées d'une Carte - @ScArcher2 a répondu parfaitement.

Quel est l'ordre d'itération - si vous êtes juste en utilisant Map, alors, strictement parlant, il n'existe pas de garanties de classement. Vous ne pouvez pas vraiment compter sur la commande donnée par toute mise en œuvre. Cependant, l' SortedMap interface étend Map et fournit exactement ce que vous êtes à la recherche pour les implémentations de cadeaux de donner une cohérence ordre de tri.

NavigableMap est une autre extension utile - c'est un SortedMap avec d'autres méthodes pour trouver des entrées par leur ordonna de position dans le jeu de clés. Donc, potentiellement, cela peut éliminer le besoin de l'itération, en premier lieu, vous pourriez être en mesure de trouver l' entry vous après l'utilisation de l' higherEntry, lowerEntry, ceilingEntryou floorEntry méthodes. L' descendingMap méthode vous donne même une méthode explicite de l'inversion de la traversée de l'ordre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: