Was ist ein Iterator?
Im Beispiel wird zunächst ein TreeSet
mit 20
String-Elementen initialisiert. Hier könnte problemlos auch
jede andere Sammlung verwendet werden, da das zentrale
Wurzel-Interface Collection
vom Interface java.lang.Iterable
abgeleitet ist.
In der Folge wird die Sammlung zweimal
durchlaufen, zur Demonstration der Techniken einmal in einer for-
und einmal in einer while-Schleife. Ein Iterator-Objekt wird mittels
der Methode iterator()
erzeugt. Dessen Methode hasNext()
liefert true, solange der Iterator noch nicht das Ende der
Collection erreicht hat. Mit next()
greift man auf das
jeweils nächste Element zu.
Im ersten Schleifendurchlauf
wird darüber hinaus gezeigt, dass das Entfernen eines Elementes
beim Iterieren über eine Collection nur mit der Methode Iterator.remove()
,
nicht mit Collection.remove()
erfolgen darf. Hierbei
entfernt Iterator.remove()
das jeweils letzte mit next()
ermittelte Element, das jedoch noch ausgegeben wird, da es zwar aus
der Sammlung, nicht aber aus dem aktuellen Iterator entfernt wurde.
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
public class IteratorTest {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<String>();
for (int i = 0; i < 20; i++) {
set.add(new Integer(i).toString());
}
for (Iterator<String> it = set.iterator(); it.hasNext();) {
String s = it.next();
if (s.equals("15"))
it.remove();
System.out.println(s); // "15" noch enthalten
}
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
String s = iter.next();
// if(s.equals("15")) set.remove(s); // ConcurrentModificationException
iter.remove();
System.out.println(s); // "15" entfernt
}
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.