2009-06-29 4 views

Antwort

37

Neben dem, was Jeremy sagte, ist sein Hauptvorteil, dass es sein eigenes bisschen syntaktischen Zucker hat: enhanced for-loop. Wenn Sie haben, sagen wir, ein Iterable<String>, können Sie tun:

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

Schön und einfach, ist es nicht? All die schmutzige Arbeit der Erstellung der Iterator<String>, Überprüfung, ob es hasNext() und Aufruf str = getNext() ist hinter den Kulissen von dem Compiler behandelt.

Und da die meisten Sammlungen entweder Iterable implementieren oder eine Ansicht, die eine zurückgibt (wie Map ‚s keySet() oder values()), dies macht die Arbeit mit Sammlungen viel einfacher zu arbeiten.

Die Iterable Javadoc gibt eine vollständige Liste der Klassen, die Iterable implementieren.

11

Wenn Sie eine komplizierte Datenmenge haben, wie ein Baum oder eine spiralförmige Schlange (ja, ich habe gerade das oben), aber Sie nicht egal, wie es intern strukturiert ist, Sie wollen einfach alle Elemente eins bekommen um einen, Sie erhalten es einen Iterator zurückzugeben.

Das betreffende komplexe Objekt, sei es ein Baum oder eine Queue oder ein WombleBasket, implementiert Iterable und kann ein Iterator-Objekt zurückgeben, das Sie mithilfe der Iterator-Methoden abfragen können.

So können Sie nur fragen, ob es hasNext(), und wenn es so ist, erhalten Sie die next() Artikel, ohne sich Sorgen zu machen, wo man es aus dem Baum oder wo auch immer.

3

Iteratoren ermöglichen grundsätzlich Iteration über jede Sammlung.

Es ist auch, was erforderlich ist, um Java für jede Steueranweisung zu verwenden.

5

Es gibt eine java.util.Iterator zurück. Es ist vor allem für Schleife

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

der Compiler ruft die list.iterator() und iteriert Unter der Haube in der Lage sein zu verwenden, um die Umsetzung der Art in der erweiterten verwendeten Sie die i innerhalb der for-Schleife zu geben.

+0

ahhh - zu langsam ;-) –

+2

Bis jetzt die beste Antwort. –

3

Eine Schnittstelle ist im Kern eine Liste von Methoden, die eine Klasse implementieren sollte. Die iterierbare Schnittstelle ist sehr einfach - es gibt nur eine Methode zu implementieren: Iterator(). Wenn eine Klasse die Schnittstelle Iterable implementiert, teilt sie anderen Klassen mit, dass Sie ein Objekt Iterator verwenden können, um die Daten im Objekt zu iterieren (d. H. Zu durchlaufen).