From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100100.html | 325 +++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100100.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100100.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100100.html b/Master/Reference Architectures and Patterns/hjp5/html/k100100.html new file mode 100644 index 0000000..035d14a --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100100.html @@ -0,0 +1,325 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 15 - Collections II +
+
+ + + + +

15.3 Iteratoren

+
+ +
+ + + + +

15.3.1 Das Interface Iterator

+ +

+Auf die Collections der Prä-1.2-JDKs konnte mit Hilfe des Enumeration-Interfaces +und seiner beiden Methoden hasMoreElements +und nextElement +zugegriffen werden. Da Objekte, die dem Durchlaufen von Collections +dienen, überall in der Informatik als Iteratoren bezeichnet +werden, wurde die Namensgebung des Interfaces und seiner Methoden +vielfach kritisiert. Die Designer der Collections der Version 1.2 +haben sich nun dem allgemeinen Sprachgebrauch angepasst und das Interface +zum Durchlaufen der Elemente einer Collection als Iterator +bezeichnet und mit folgenden Methoden ausgestattet: +

+ + + + + +
+ +
+boolean hasNext()
+
+Object next()
+
+void remove()
+
+
+
+java.util.Iterator
+ +

+Ein solches Iterator-Objekt kann über die Methode iterator +für jede Collection des Frameworks erzeugt werden. Hierfür +wurde das Interface java.lang.Iterable +definiert, welches auch von jeder Collection implementiert wird. + +

+hasNext +gibt genau dann true +zurück, wenn der Iterator mindestens ein weiteres Element enthält. +next +liefert das nächste Element bzw. löst eine Ausnahme des +Typs NoSuchElementException +aus, wenn es keine weiteren Elemente gibt. Wie beim Enumeration-Interface +ist der Rückgabewert als Object +deklariert und muss daher auf das passende Object gecastet werden. +Als neues Feature (gegenüber einer Enumeration) +bietet ein Iterator +die Möglichkeit, die Collection während der Abfrage zu ändern, +indem das zuletzt geholte Element mit der Methode remove +gelöscht wird. Bei allen Collections, die das Interface Collection +implementieren, kann ein Iterator zum Durchlaufen aller Elemente mit +der Methode iterator +beschafft werden. +

+ + + + + + + + + + + +
+ +

+Dies ist auch gleichzeitig die einzige erlaubte Möglichkeit, +die Collection während der Verwendung eines Iterators zu ändern. +Alle direkt ändernden Zugriffe auf die Collection machen das +weitere Verhalten des Iterators undefiniert.

+ + + + +
 Warnung 
+
+ +

+Wir wollen uns die Benutzung eines Iterators an einem Beispiel ansehen: + + +

+ + + + + +
+ +
+001 /* Listing1502.java */
+002 
+003 import java.util.*;
+004 
+005 public class Listing1502
+006 {
+007   public static void main(String[] args)
+008   {
+009     //Füllen der Liste
+010     ArrayList list = new ArrayList();
+011     for (int i = 1; i <= 20; ++i) {
+012       list.add("" + i);
+013     }
+014     //Löschen von Elementen über Iterator
+015     Iterator it = list.iterator();
+016     while (it.hasNext()) {
+017       String s = (String) it.next();
+018       if (s.startsWith("1")) {
+019         it.remove();
+020       }
+021     }
+022     //Ausgeben der verbleibenden Elemente
+023     it = list.iterator();
+024     while (it.hasNext()) {
+025       System.out.println((String) it.next());
+026     }
+027   }
+028 }
+
+
+Listing1502.java
+ +Listing 15.2: Zugriff auf eine Collection mit einem Iterator

+ +

+Das Programm erzeugt zunächst eine Liste mit den Elementen »1«, +»2«, ..., »20«. Anschließend wird durch +Aufruf von iterator +ein Iterator über alle Elemente der Liste beschafft. Mit seiner +Hilfe werden alle Elemente der Liste durchlaufen und diejenigen, die +mit »1« anfangen, gelöscht. Der zweite Durchlauf durch +die Liste zeigt dann nur noch die übriggebliebenen Elemente an: + +

+2
+3
+4
+5
+6
+7
+8
+9
+20
+
+ +

+ + + + + + + + + + + +
+ +

+Seit der J2SE 5.0 gibt es eine Erweiterung der for-Schleife, +mit der Collection-Klassen einfach durchlaufen werden können. +Diese, auch als foreach-Schleife bezeichnete Variante wird in Abschnitt 6.3.3 +ausführlich erläutert.

+ + + + +
 JDK1.1-6.0 
+
+ + + + +

15.3.2 Das Interface ListIterator

+ +

+Neben dem Iterator-Interface +gibt es das daraus abgeleitete Interface ListIterator. +Es steht nur bei Collections des Typs List +(und daraus abgeleiteten Klassen) zur Verfügung und bietet zusätzlich +die Möglichkeit, die Liste in beiden Richtungen zu durchlaufen, +auf den Index des nächsten oder vorigen Elements zuzugreifen, +das aktuelle Element zu verändern und ein neues Element hinzuzufügen: +

+ + + + + +
+ +
+boolean hasPrevious()
+Object previous()
+
+int nextIndex()
+int previousIndex()
+
+void add(Object o)
+void set(Object o)
+
+
+
+java.util.ListIterator
+ +

+Mit hasPrevious +kann bestimmt werden, ob es vor der aktuellen Position ein +weiteres Element gibt; der Zugriff darauf würde mit previous +erfolgen. Die Methoden nextIndex +und previousIndex +liefern den Index des nächsten bzw. vorigen Elements des Iterators. +Wird previousIndex +am Anfang des Iterators aufgerufen, ist sein Rückgabewert -1. +Wird nextIndex +am Ende aufgerufen, liefert es size() +als Rückgabewert. Mit add +kann ein neues Element an der Stelle in die Liste eingefügt werden, +die unmittelbar vor dem nächsten Element des Iterators liegt. +set +erlaubt es, das durch den letzten Aufruf von next +bzw. previous +beschaffte Element zu ersetzen. +

+ + + + + + + + + +
+ +

+Ebenso wie beim Interface Collection +sind die ändernden Methoden der Iteratoren optional. Falls +ein Iterator eine dieser Methoden nicht zur Verfügung stellen +will, löst er bei ihrem Aufruf eine Ausnahme des Typs UnsupportedOperationException +aus. Das gilt für die Methoden add, +set +und remove.

+ + + + +
 Hinweis 
+
+


+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3