Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException?

osion

Bekanntes Mitglied
Hallo

Frage im Unterricht: Ob ich mit diesem Methodenkopf Einträge in der Arraylist löschen kann, welche grösser als 100 sind.

1634390305749.png
Ich erhalte einen IllegalStateException bei at.remove(). Ich frage mich aber warum.
1634390403888.png
 
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.
 

Zurück
Oben