Ich bin interessiert, wenn es ein Framework gibt, das eine Sammlung implementiert, die das folgende Verhalten hätte.Java-Sammlung zum Hinzufügen und Entfernen während der Iteration
nehme an, es enthält zu Beginn: [1, 2, 3]
- I iterieren es (einen Iterator verwendet wird) und erreichen Element 2 nun I 4 zum Ende hinzuzufügen (die Sammlung wird jetzt sei [1, 2, 3, 4]).
- jetzt erstelle ich einen neuen Iterator und die Sammlung iterieren, was zu [1, 2, 3, 4]
- ich mit dem ersten Iterator weiter laufen und es wird mir geben nur 3 und zurück
- jetzt das Zurücksetzen Der erste Iterator gibt mir [1, 2, 3, 4] (ähnlich wie beim Erstellen eines neuen).
Gleiches sollte für die Entfernung von Elementen gelten. Wenn ich 3 entferne, anstatt hinzuzufügen, sollte der zweite Iterator mir [1, 2] geben, während der erste I noch 3 und das Ende geben wird.
Also, wenn ich bekommen und Iterator will ich es mir die Sammlung geben, die ich hatte, als ich den Iterator erstellt (auch wenn ich es iterieren später, am ich ein wenig und später weiterlaufen), wenn ich die Reset Iterator, es wird Müll gesammelt, es wird auf die neuesten Versionen aktualisiert, und ich sollte in der Lage sein, mehrere Iterator-Instanzen zu verschiedenen Zeiten erstellt zu haben, die verschiedene Versionen abhängig vom Inhalt des Arrays ergeben, wenn der Iterator erstellt wurde.
Ich würde es gut mit mehreren Threads arbeiten und vorzugsweise eine effiziente Implementierung haben.
Kennt jemand irgendeine Implementierung einer solchen Sammlung, oder muss ich es selbst implementieren?
Gibt es eine neue Kopie der Sammlung auf Änderung (intern) erstellen? Oder wird es effizienter umgesetzt? – Razvi
Ja wie im Javadoc beschrieben: "Alle mutativen Operationen (hinzufügen, setzen usw.) werden implementiert, indem eine neue Kopie des zugrunde liegenden Arrays erstellt wird." – assylias
Das Verhalten sieht aus, als was ich brauche. Aber die Sammlung wird einiges enthalten. Iteratoren werden häufig darauf erstellt, aber ich glaube, dass Änderungen seltener sind (so dass Kopien bei Änderung möglicherweise nicht zu viel Leistungsverlust verursachen). – Razvi