web-dev-qa-db-fra.com

À quoi sert l'interface Iterable?

Je suis un débutant et je ne peux pas comprendre l'effet réel de l'interface Iterable.

37
Johanna

Outre ce que Jeremy a dit, son principal avantage est qu'il possède son propre morceau de sucre syntaxique: le for-loop amélioré . Si vous avez, disons, un Iterable<String>, Vous pouvez faire:

for (String str : myIterable) {
    ...
}

Agréable et facile, non? Tout le sale boulot de créer le Iterator<String>, De vérifier s'il hasNext(), et d'appeler str = getNext() est géré en arrière-plan par le compilateur.

Et comme la plupart des collections implémentent Iterable ou ont une vue qui en renvoie une (telle que Map's keySet() ou values()), cela rend le travail avec les collections beaucoup plus facile.

Iterable Javadoc donne une liste complète des classes qui implémentent Iterable.

46
Michael Myers

Si vous avez un ensemble de données compliqué, comme un arbre ou une file d'attente hélicoïdale (oui, je viens de l'inventer), mais vous peu importe comment il est structuré en interne, vous voulez juste obtenir tous les éléments un par un, vous l'obtenez pour renvoyer un itérateur.

L'objet complexe en question, qu'il s'agisse d'une arborescence ou d'une file d'attente ou d'un WombleBasket implémente Iterable, et peut renvoyer un objet itérateur que vous pouvez interroger à l'aide des méthodes Iterator.

De cette façon, vous pouvez simplement lui demander si elle hasNext(), et si c'est le cas, vous obtenez l'élément next(), sans vous soucier où l'obtenir de l'arborescence ou n'importe où.

14
Jeremy Smyth

Il renvoie un Java.util.Iterator. Il est principalement utilisé pour pouvoir utiliser le type d'implémentation dans la boucle for améliorée

List<Item> list = ...
for (Item i:list) {
 // use i
}

Sous le capot, le compilateur appelle la list.iterator() et l'itère en vous donnant le i à l'intérieur de la boucle for.

5
Peter Kofler

Une interface est au cœur d'une liste de méthodes qu'une classe doit implémenter. L'interface itérable est très simple - il n'y a qu'une seule méthode à implémenter: Iterator(). Lorsqu'une classe implémente l'interface Iterable, elle indique aux autres classes que vous pouvez obtenir un objet Iterator à utiliser pour parcourir (c'est-à-dire parcourir) les données de l'objet.

4
Matt Bridges

Les itérateurs permettent essentiellement l'itération sur n'importe quelle collection.

C'est aussi ce qui est requis pour utiliser l'instruction de contrôle Java for-each.

3
Zack Marrapese