Iterator über Listen
Ein Iterator kapselt die aktuelle Position in der Liste. hasNext und next wandern knotenweise, ohne die innere Darstellung preiszugeben.
In Java liefert Collection.iterator() einen Iterator. Während der Iteration darf die Liste nicht strukturell verändert werden, sonst droht ConcurrentModificationException (fail-fast).
Vorteil: Algorithmen arbeiten gegen das Iterator-Protokoll und bleiben von Array versus Liste entkoppelt.
Randfall: next ohne hasNext-Prüfung wirft NoSuchElementException.
| Methode | Wirkung |
|---|---|
| hasNext | prüft, ob noch ein Element wartet |
| next | liefert den Wert und rückt vor |
| ## Wo gebraucht |
for-each, Streams und Collection-APIs laufen über Iteratoren. Fail-fast-Iteratoren in der JDK erkennen strukturelle Änderungen während der Iteration. Eigenes Iterator-Schreiben trainiert das Muster hinter Enhanced for und hinter Graph-/Baumwanderungen.
Vertiefung
Ein Listeniterator speichert typischerweise den nächsten auszugebenden Knoten. hasNext prüft nur, ob diese Referenz existiert, und next liefert den Wert und rückt anschliessend weiter. Damit benötigt die Traversierung keinen wiederholten Indexzugriff.
Das Iteratorobjekt kapselt einen zeitabhängigen Cursor. Mehrere Iteratoren können dieselbe unveränderte Liste unabhängig durchlaufen. Strukturelle Änderungen während der Iteration erfordern dagegen eine klare Semantik, etwa fail-fast-Erkennung über einen Änderungszähler.
Eine optionale remove-Operation braucht zusätzliche Information über Vorgänger und zuletzt gelieferten Knoten. Ihre Zustandsmaschine muss verhindern, dass vor dem ersten next oder zweimal nach demselben next gelöscht wird.
Schwierigkeitsstufen
- Cursorzustände von
hasNextundnextverfolgen. - Die Gesamtkosten gegenüber indexbasierter Traversierung vergleichen.
- Gültige Zustände einer entfernenden Iteratoroperation definieren.
Fallstricke
hasNext darf den Cursor nicht weiterbewegen. Ein Iterator, der bei jedem Schritt erneut vom Kopf bis zum Index läuft, macht einen vollständigen Durchlauf unnötig quadratisch.
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Beginner
- Completed: 0 users