Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException?
Bei sowas ist sollte man immer als Erstes in die Dokumentation schauen. Das wäre also bei Dir Iterator, das wir anschauen müssten und da dann die remove Methode:
IllegalStateException - if the next method has not yet been called, or the remove method has already been called after the last call to the next method
Und das besagt den Grund auch direkt: Du rufst ja nie next() auf.
hasNext() besagt ja nur, dass es noch mindestens ein Element gibt, das Du mit next() bekommen kannst.
Nein, schau, ein "Iterator" ist ein Zeiger welchen du durch die Liste bewegst. Ein "Iterator" beginnt immer *vor* dem ersten Element. Angenommen folgende Liste:
Code:
* element0
* element1
* element2
* element3
Wenn du jetzt einen neuen "Iterator" fuer diese Liste erzeugst ueber "list.iterator()" ist der Zustand so:
Code:
-->
* element0
* element1
* element2
* element3
An dieser Stelle gibt es aber kein Element welches entfernt werden muss, daher die Ausnahme welche geworfen wird. Um den Zeiger weiter zu bewegen muss "next()" aufgerufen werden.
Code:
--> * element0
* element1
* element2
* element3
*Jetzt* kann man vom Iterator aus "remove()" aufrufen, weil dieser jetzt auch auf ein Element zeigt welches entfernt werden kann.
Meistens hat man "Iterator" in einer "while"-Schleife:
Java:
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
iterator.next();
iterator.remove();
}
Wieso ist das so? Weil wenn der "Iterator" fuer eine leere Liste erzeugt wird, wuerde dieser auch ins "Nichts" zeigen. Damit muss man immer "hasNext()" und "next()" aufrufen um hier einfach Sonderfaelle und Probleme zu vermeiden.
Es wird ein Integer zurück gegeben. Aber mit dem musst du ja nichts machen. Wichtig ist, dass der Iterator dann auf dieses Element verweist und du dieses dann löschen kannst.