À quoi sert l'interface itérable?

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

32
demandé sur Michael Myers 2009-06-29 20:06:49

5 réponses

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

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

Agréable et facile, n'est-ce pas? Tout le sale boulot de créer le Iterator<String>, de vérifier s'il hasNext() et d'appeler str = getNext() est géré dans les coulisses par le compilateur.

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

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

42
répondu Michael Myers 2017-01-08 06:08:04

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 Ne vous souciez pas de comment il est structuré en interne, vous voulez juste obtenir tous les éléments un par un, vous l'obtenez pour retourner un itérateur.

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

De Cette façon, vous pouvez simplement lui demander si il hasNext(), et si il est-ce que, vous obtenez l'élément next(), sans vous soucier de l'endroit où l'obtenir de l'arbre ou où.

11
répondu Jeremy Smyth 2009-06-29 16:09:14

, 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 le list.iterator() et l'itère en vous donnant le i à l'intérieur de la boucle for.

5
répondu Peter Kofler 2009-06-29 16:11:40

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 traverser) les données de l'objet.

4
répondu Matt Bridges 2009-06-29 16:13:00

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

C'est aussi ce qui est nécessaire pour utiliser L'instruction de contrôle For-each de Java.

3
répondu Zack Marrapese 2009-06-29 16:11:33