Java Reference
In-Depth Information
4.17.5
Einsatzgebiete
Der Einsatz des Iterator-Musters ist immer dann sinnvoll, wenn ein einheitlicher Zugriff
auf Datenstrukturen mit verschiedenen Typen wie Arrays, Bäume oder Listen zur Ver-
fügung gestellt werden soll.
Iteratoren können auf rekursiven Datenstrukturen, die durch das Kompositum-Muster
erzeugt wurden, zum Einsatz kommen.
Mit einem Iterator kann die Objektstruktur des Besucher-Musters durchlaufen wer-
den.
Die Datenstrukturen, die von der Standard Template Library (STL) von C++ zur Ver-
fügung gestellt werden oder als Collections in der Java Bibliothek java.util imple-
mentiert sind, bieten Iteratoren an, mit deren Hilfe die Datenstrukturen durchlaufen
werden können.
Iteratoren in Java
Das Iterator-Muster, das von Java unterstützt wird, soll im Folgenden kurz skizziert
werden, da dessen Möglichkeiten über den bisher im Kapitel vorgestellten Mechanis-
mus hinausgehen (siehe dazu auch Kapitel 18 in [Hei10]).
Betrachtet man sich das Interface IIterator im Klassendiagramm Bild 4-56 ge-
nauer, so stellt man fest, dass es den Typ Element benutzt. Dieses Interface muss
also für jeden Elementtyp neu definiert werden. In Java werden stattdessen die Mög-
lichkeiten der generischen Programmierung (im Englischen kurz mit Generics be-
zeichnet) eingesetzt. Die Bibliothek java.util enthält das Interface Iterator<E> ,
das bis auf den generischen Typparameter ein ähnliches Aussehen wie das hier im
Buch vorgestellte Interface IIterator hat und die Methoden next() und has-
Next() definiert.
Dieses Interface Iterator<E> könnte man auch beim vorhergehenden Programm-
beispiel nutzen und in der Klasse MitarbeiterArray den Iterator wie folgt erzeu-
gen:
public Iterator<Mitarbeiter> erzeugeIterator()
{
return new MitarbeiterIterator(data, index);
}
Die Klasse MitarbeiterIterator muss nun natürlich das Interface Iterator-
<Mitarbeiter> implementieren 69 . Weiterhin muss die Nutzung des erzeugten
Iterators in der Klasse TestClient leicht angepasst werden:
Iterator<Mitarbeiter> iter = maListe.erzeugeIterator();
69 Da das Interface Iterator<E> eine Methode remove() definiert, muss die Klasse Mitarbeiter-
Iterator noch um eine leere Methode remove() ergänzt werden, damit das modifizierte Beispiel
lauffähig wird. Der vollständige Quellcode des modifizierten Beispiels ist auf dem begleitenden Web-
auftritt zu finden.
Search WWH ::




Custom Search