Java Reference
In-Depth Information
Infolge der Trennung der Datenstruktur und des Mechanismus
des Traversierens kann man Iteratoren für verschiedene
Traver-
sierungsarten
schreiben, ohne dabei die Schnittstelle der Daten-
struktur zu verändern
Die Realisierung der Traversierung wird aus der Datenstruktur herausgehalten. Da-
durch wird die Formulierung der Datenstruktur einfacher. Eine Traversierung kann im
Falle einer Liste zum Beispiel sequenziell vorwärts oder sequenziell rückwärts erfol-
gen. Bei einem Baum kann beispielsweise nach der Strategie Depth-First
67
traversiert
werden.
Man unterscheidet externe und interne Iteratoren. Bei einem
ex-
ternen Iterator
wird die Iteration vom Client selbst gesteuert,
d. h., der Client muss das Weiterrücken des Iterators veranlas-
sen. Ein
interner Iterator
rückt von selbst vor und kapselt so den
Aufbau einer Iteration. Dadurch wird die Iteration wiederverwend-
bar. Sie muss also nicht wie bei einem externen Iterator stets neu
programmiert werden.
Einem internen Iterator muss die Operation übergeben werden, die er während eines
Durchlaufs ausführen soll. Interne Iteratoren werden ausführlich in "Design Patterns -
Elements of Reusable Object-Oriented Software" [Gam95] der sogenannten "
Gang of
Four
"
(GoF) vorgestellt. Da interne Iteratoren den Aufbau der Iteratoren kapseln, ist
von außen ihre Eigenschaft als Iterator nicht mehr erkennbar. Sie werden in dem vor-
liegenden Buch nicht weiter betrachtet.
Im Folgenden werden
externe
Iteratoren
mit
sequenziellem Zugriff
behandelt. Solch
ein Iterator hat grundsätzlich die beiden Methoden
next()
und
hasNext()
. Diese
beiden Methoden sind typisch für externe Iteratoren. Die Methode
hasNext()
stellt
fest, ob es noch ein nächstes Element gibt oder nicht, die Methode
next()
beschafft
das nächste Element. Gibt es noch weitere Elemente in der Datenstruktur, gibt die
Methode
hasNext()
als Ergebnis
true
zurück. Das folgende Bild zeigt die Trennung
von Iterator und der zu durchquerenden Datenstruktur für den Fall eines externen
Iterators:
67
Depth-First bedeutet "Tiefe zuerst" - bildlich gesprochen geht man in einem Baum erst in die Tiefe,
dann in die Breite. Das bedeutet, dass bei der Depth-First Traversierung ausgehend vom Startknoten
ein Unterzweig eines jeden auftretenden Kindknotens bis zu dessen letzten Kindknoten durchlaufen
wird und erst anschließend zurückgekehrt wird, um einen Nachbarknoten zu besuchen.
Search WWH ::
Custom Search