Ich habe dieses Stück Code, wo ich eine Arraylist mit einem Iterator bin durchqueren, wie:Java Modifizieren Liste gleichzeitig an verschiedenen Orten
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Element element = iterator.next();
iterator.remove();
handle(element)
}
wo'handle (Element Element) `wie geht:
ListIterator iterator = list.listiterator();
iterator.add(element);
Nun gibt dies eine ConcurrentModificationException, da die iterator
in der ersten Methode nicht mit dem neu hinzugefügten Element aktualisiert wird.
Ich habe dies derzeit mit einem CopyOnWriteArrayList gelöst, aber diese sind sehr teuer für die Leistung. Gibt es einen besseren Weg, das zu beheben?
Vielen Dank im Voraus!
(Anmerkung: das Beispiel keinen Sinn macht, wurde aber gemacht zu zeigen, was ich bin vor mit)
ich versuchen zu erklären, warum ich das tue:
ich habe eine Liste von ‚Befehlen‘ in meiner Hauptklasse, die
ausgeführt werden müssen ich habe eine while-Schleife (Code 1 im Beispiel), dass iteriert über diese Befehle und führen sie ein-für- auf e, während sie bei der Ausführung aus der Liste entfernt werden.
Beim Ausführen eines Befehls kann dieser Befehl der Liste einen neuen Befehl hinzufügen, der in meiner Hauptklasse gespeichert wird. (Das ist eigentlich ein bisschen komplizierter: die Behandlung eines Befehls erfordert eine Antwort vom Client, der wiederum mit einem Befehl antwortet, und dieser wird zur gespeicherten Liste hinzugefügt).
Warum machst du das? Das heißt, warum versuchen Sie, die gleiche Liste mit zwei verschiedenen Arten von Iterator zu verarbeiten? – Makoto
Können Sie versuchen, Ihr reales Beispiel oder eine vereinfachte Version davon zu erklären? –
Ich habe versucht zu erklären, was ich versuche, so gut wie möglich zu tun (siehe Bearbeiten). Entschuldigung für die Verwirrung und danke für die Berücksichtigung! –