Comment obtenir de la boucle de courant de l'index lors de l'utilisation d'un Itérateur?
Je suis en utilisant un Itérateur pour parcourir une collection
et je veux obtenir le courant de l'élément d'index.
Comment puis-je le faire?
- double possible de Est-il un moyen d'accéder à une itération vente libre en Java pour-chaque tour de boucle?
- Je ne pense pas qu'ils sont en double. Cette question est à poser à l'aide d'Itérateur, l'autre est à l'aide de boucle for-each. Les deux questions sont résolues par une approche similaire, de sorte que les réponses sont en double pas la question.
Vous devez vous connecter pour publier un commentaire.
Utiliser votre propre variable et l'incrémenter dans la boucle.
it.nextIndex()
. Utile lorsque la collection est une Liste de.J'ai eu la même question et a découvert à l'aide d'un ListIterator travaillé. Similaire au test ci-dessus:
Assurez-vous que vous appelez la nextIndex AVANT de vous apprendre la méthode next().
Voici un moyen de le faire à l'aide de votre propre variable et de le garder concis:
De sortie (vous l'aurez deviné):
L'avantage est que vous n'avez pas d'incrément de votre index à l'intérieur de la boucle (bien que vous devez être prudent de n'appeler qu'Itérateur#prochaine une fois par boucle - just do it en haut).
asList("zero", "one", "two")
Vous pouvez utiliser
ListIterator
à faire le décompte:Ce genre de collection? Si c'est une mise en œuvre de la Liste de l'interface alors vous pouvez simplement utiliser
it.nextIndex() - 1
.Utiliser un ListIterator pour parcourir la Collection. Si la Collection n'est pas une Liste pour commencer à utiliser
Arrays.asList(Collection.toArray())
pour la transformer en une Liste de la première.Utiliser un int et l'incrémenter au sein de votre boucle.
juste faire quelque chose comme ceci:
Voir ici.
iterator.nextIndex()
serait de fournir de l'indice de l'élément qui serait retourné par l'appel suivant denext()
.Tout ce que vous devez utiliser l'itérateur.nextIndex() pour retourner à l'index actuel que l'itérateur est sur. Cela pourrait être un peu plus facile que d'utiliser votre propre variable de compteur (qui fonctionne toujours aussi).
Ce code va passer par la liste 1 liste à un seul élément à la fois et imprimer l'élément de texte, puis "est à l'index", puis il va imprimer l'index que l'itérateur trouvé. 🙂
Si vous avez déjà eu la réponse, pensé à ajouter quelques infos.
Comme vous l'avez mentionné Collections explicitement, vous ne pouvez pas utiliser
listIterator
pour obtenir l'index pour tous les types de collections.Liste des interfaces - ArrayList, LinkedList, Vecteur et de la Pile.
A deux
iterator()
etlistIterator()
Ensemble des interfaces - HashSet, LinkedHashSet, TreeSet et EnumSet.
A seulement
iterator()
Carte interfaces - HashMap, LinkedHashMap, TreeMap et IdentityHashMap
N'a pas d'itérateurs, mais l'on peut parcourir à l'aide par le biais de la
keySet()
/values()
ouentrySet()
commekeySet()
etentrySet()
retourneSet
etvalues()
retourneCollection
.Donc de son mieux pour utiliser
iterators()
continue avec l'incrément de valeur pour obtenir l'indice actuel pour n'importe quel type de collection.