Ich bin ein Anfänger und ich kann die reale Wirkung der Iterable
Schnittstelle nicht verstehen.Wozu dient die Iterable-Schnittstelle?
Antwort
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.
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.
Iteratoren ermöglichen grundsätzlich Iteration über jede Sammlung.
Es ist auch, was erforderlich ist, um Java für jede Steueranweisung zu verwenden.
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.
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).
ahhh - zu langsam ;-) –
Bis jetzt die beste Antwort. –