Je suis nouveau en Java et je suis vraiment confus avec iterator et iterable. Quelqu'un peut-il m'expliquer et donner quelques exemples?
197
An Iterable
est une représentation simple d'une série d'éléments sur lesquels il est possible de répéter. Il n'a aucun état d'itération tel qu'un "élément courant". Au lieu de cela, il a une méthode qui produit un fichier Iterator
.
An Iterator
est l'objet avec l'état d'itération. Il vous permet de vérifier s'il a plus d'éléments en utilisant hasNext()
et de passer à l'élément suivant (le cas échéant) en utilisant next()
.
En règle générale, un Iterable
devrait être en mesure de produire n'importe quel nombre de Iterator
s valides .
Iterable
hasinteral
ouexternal
iterator ou s'il est possible d'en avoir?Une implémentation de
Iterable
est celle qui fournit unIterator
de lui-même:Un itérateur est un moyen simple de permettre à certains de parcourir une collection de données sans privilèges d'attribution (mais avec la possibilité de supprimer).
Voir Javadoc .
la source
Je répondrai à la question en particulier sur ArrayList à titre d'exemple afin de vous aider à mieux comprendre.
. Et Iterable, Collection et List déclarent simplement la méthode abstraite 'iterator ()' et ArrayList seul l'implémente.
La méthode 'iterator ()' renvoie un objet de la classe 'Itr' qui implémente 'Iterator'.
Maintenant, est-ce clair? :)
la source
Iterable<T>
alors dans ce scénario, quelles étapes devons-nous implémenter? Veuillez suggérer cet exemple également.Si une collection est itérable, alors elle peut être itérée à l'aide d'un itérateur (et par conséquent peut être utilisée dans une pour chaque boucle.) L'itérateur est l'objet réel qui itérera dans la collection.
la source
java.lang.Iterable
?java.lang.Iterable
L'implémentation de l'interface Iterable permet à un objet d'être la cible de l'instruction "foreach".
Iterator est une interface qui a une implémentation pour itérer sur des éléments. Iterable est une interface qui fournit Iterator.
la source
La considération la plus importante est de savoir si l'élément en question doit pouvoir être parcouru plus d'une fois. C'est parce que vous pouvez toujours rembobiner un Iterable en appelant à nouveau iterator (), mais il n'y a aucun moyen de rembobiner un Iterator.
la source
Comme expliqué ici , le « Iterable » a été introduit pour pouvoir être utilisé dans la
foreach
boucle. Une classe implémentant l' interface Iterable peut être itérée.Iterator est une classe qui gère l'itération sur un Iterable . Il maintient un état où nous en sommes dans l'itération actuelle, et sait quel est l'élément suivant et comment l'obtenir.
la source
Prenons un exemple avec 10 pommes. Quand il implémente Iterable, c'est comme mettre chaque pomme dans des cases de 1 à 10 et retourner un itérateur qui peut être utilisé pour naviguer.
En implémentant l'itérateur, nous pouvons obtenir n'importe quelle pomme, pomme dans les boîtes suivantes, etc.
Ainsi, l'implémentation de iterable donne à un itérateur la possibilité de naviguer dans ses éléments, mais pour naviguer, l'itérateur doit être implémenté.
la source
Question: Différence entre Iterable et Iterator?
Ans:
iterable: il est lié à l'
itérateur de boucle forEach : Is est lié à la collection
L'élément cible de la boucle forEach doit être itérable.
Nous pouvons utiliser Iterator pour obtenir l'objet un par un de la collection
Iterable présent dans le package java.ḷang
Iterator présent dans le package java.util
Contient une seule méthode iterator ()
Contient trois méthodes hasNext (), next (), remove ()
Introduit dans la version 1.5
Introduit dans la version 1.2
la source
Fondamentalement, les deux sont très étroitement liés les uns aux autres.
Considérez Iterator comme une interface qui nous aide à parcourir une collection à l'aide de certaines méthodes non définies comme hasNext (), next () et remove ()
D'un autre côté, Iterable est une autre interface qui, si elle est implémentée par une classe, force la classe à être Iterable et est une cible pour la construction For-Each. Il n'a qu'une seule méthode nommée iterator () qui provient de l'interface Iterator elle-même.
Lorsqu'une collection est itérable, elle peut être itérée à l'aide d'un itérateur.
Pour comprendre, visitez ces:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
ITERATOR http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
la source
Je sais que c'est une vieille question, mais pour quiconque lit ceci qui est coincé avec la même question et qui peut être submergé par toute la terminologie, voici une bonne analogie simple pour vous aider à comprendre cette distinction entre les itérables et les itérateurs:
Pensez à une bibliothèque publique. Vieille école. Avec des livres en papier. Oui, ce genre de bibliothèque.
Une étagère pleine de livres serait comme un itérable. Vous pouvez voir la longue file de livres dans l'étagère. Vous ne savez peut-être pas combien, mais vous pouvez voir qu'il s'agit d'une longue collection de livres.
Le bibliothécaire serait comme l'itérateur. Il peut pointer vers un livre spécifique à tout moment. Il peut insérer / supprimer / modifier / lire le livre à l'endroit où il pointe. Il pointe, dans l'ordre, chaque livre à la fois chaque fois que vous criez "suivant!" à lui. Donc, vous lui demanderiez normalement: "a le suivant?", Et il dira "oui", auquel vous répondez "suivant!" et il indiquera le prochain livre. Il sait également quand il a atteint le bout de l'étagère, de sorte que lorsque vous demandez: "a Next?" il dira "non".
Je sais que c'est un peu idiot, mais j'espère que cela aide.
la source
En plus des réponses ColinD et Seeker .
En termes simples, Iterable et Iterator sont tous deux des interfaces fournies dans Collection Framework de Java.
Itérable
Une classe doit implémenter l'interface Iterable si elle veut avoir une boucle for-each pour itérer sur sa collection. Cependant, la boucle for-each ne peut être utilisée que pour parcourir la collection dans le sens direct et vous ne pourrez pas modifier les éléments de cette collection . Mais, si tout ce que vous voulez est de lire les données des éléments, c'est très simple et grâce à l'expression Java lambda, c'est souvent une ligne. Par exemple:
Itérateur
Cette interface vous permet d'itérer sur une collection, d'obtenir et de supprimer ses éléments. Chacune des classes de collection fournit une méthode iterator () qui renvoie un itérateur au début de la collection. L'avantage de cette interface par rapport aux itérations est qu'avec cette interface, vous pouvez ajouter, modifier ou supprimer des éléments dans une collection . Mais, accéder aux éléments nécessite un peu plus de code que d'itérables. Par exemple:
Sources:
la source
Iterable
ont été introduits pour utiliser dans pour chaque boucle en javaIterator
est une classe qui gère l'itération sur un fichierIterable
. Il maintient un état où nous en sommes dans l'itération actuelle, et sait quel est l'élément suivant et comment l'obtenir.la source