Collection während Iteration verändern

Status
Nicht offen für weitere Antworten.

banshee

Bekanntes Mitglied
Hallo,

ich würde gerne Elemente aus einer Collection löschen, während ich sie durchlaufe. Das führt natürlich dazu, dass der Iterator ins Leere greift und eine Exception wirft. Bleibt mir da keine andere Möglichkeit, als irgendwie ein bool-Array anzulegen und die Collection danach bearbeiten oder kann ich sie z.B. irgendwie rückwärts durchlaufen und immer das hinterste Element löschen?
 

sliwalker

Top Contributor
Merk Dir doch die Objekte in einer anderen Collection/List.
Dann kannste danach du4rch diese iterieren und alles aus der ersten Collection löschen.

Sauberer ist natürlich wenn die Objekte in der Collection ein Attribut "removed" oder so hätten.
Aber das bekommst nachträglich natürlich nicht mehr rein, oder?
 

Painii

Bekanntes Mitglied
evtl. unsauber?

Java:
boolean ende;
do{
try{
 for(Element e:collection)if(/*e soll entfernt werden*/)collection.remove(e);
 ende=true;
}catch(/*Exception des Iterators nehm ich an? (ConcurrentModificationException*/){
 ende=false;
}
}while(!ende)
Durchlaufe die while-schleife, wenn ein element entfernt wird sollte dein Iterator eine Exception werfen -> du durchläufst die while-schleife nochmal, ein neuer Iterator wird gebaut wo du dann wieder ein element rausnimmst.
Wenn der Iterator einmal durchkommt hat er kein Element mehr löschen müssen -> die while-schleife kann beendet werden.
 

SchonWiederFred

Bekanntes Mitglied
ich würde gerne Elemente aus einer Collection löschen, während ich sie durchlaufe.
Du musst die Collection auf die Java 1.4 Weise durchlaufen, also explizit einen Iterator anfordern und diesen fortbewegen.
Dann musst Du remove auf dem Iterator aufrufen, nicht auf der Collection. Hier ist ein Beispiel.
Java:
public static void removeOdd(Collection<Integer> collection)
{
	Iterator<Integer> it = collection.iterator();
	while (it.hasNext())
	{
		Integer i = it.next();
		if ((i & 1) != 0)
		{
			it.remove(); // <--- wichtig!
		}
	}
}
Und ganz allgemein ausgedrückt (Element und shouldBeRemoved durch konkrete Dinge ersetzen):
Java:
public static void removeElements(Collection<Element> collection)
{
	Iterator<Element> it = collection.iterator();
	while (it.hasNext())
	{
		Element e = it.next();
		if (shouldBeRemoved(e))
		{
			it.remove(); // <--- wichtig!
		}
	}
}
 

banshee

Bekanntes Mitglied
Hallo,

das gleiche Problem habe ich jetzt mit JLists. Ich möchste alle selektierten Elemente löschen und

Java:
for(index i : liste.getSelectedIndices())
((DefaultListModel)liste.getModel()).remove(i);

löscht sich die Elemente dann wieder selbst vor der Nase weg. Gibt es da eine andere saubere Möglichkeit oder muss ich das Array dann in ein Objekt umwandeln, dass man mit einem Iterator durchlaufen kann?
 

Landei

Top Contributor
Wenn ich was aus einer Liste löschen muss, mache ich das immer rückwärts, weil ich dann nie Probleme mit dem "Nachrutschen" habe:
Java:
List<X> list = getXList();
for(int i = list.size()-1; i >= 0; i--) {
   X x = list.get(i);
   if(loeschen(x)) {
       list.remove(i);
   }
}
 

banshee

Bekanntes Mitglied
okay, leider das nächste Problem gleicher Art.

Diesmal muss ich aus einem eigenen DatenModell löschen, das intern eine HashMap verwaltet. Das Problem dabei ist, dass ich nicht iterator.remove aufrufen kann, sondern auf die eigene remove-Funktion ausweichen muss, weil da noch mehr gelöscht werden muss, als nur der Eintrag aus der HashMap.

Ich kann allerdings auch nicht die Technik des rückwärts Durchlaufens anwenden, weil ich eine Collection von DataEntrys zurückbekomme, die ich nicht in ein "manuell iterierbares" Format casten kann (oder ich bin zu doof dazu, kann natürlich auch sein :D)
 

André Uhres

Top Contributor
Ich bin nicht sicher, ob du das meinst, aber wir können die Keys in ein Array setzen, das wir dann rückwärts durchlaufen:
Java:
Object[] keys = map.keySet().toArray();
for (int i = keys.length-1; i > -1; i--) {
    map.remove(keys[i]);
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera Garbage Collection Java Basics - Anfänger-Themen 9
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
E Interface List nicht als Collection an erkannt. Java Basics - Anfänger-Themen 14
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
N Collections Werte aus .txt in einer Collection speichern Java Basics - Anfänger-Themen 11
M Collection Aufgabe Java Basics - Anfänger-Themen 22
Arif Collections Unkonstruiertes Objekt einer Collection hinzufügen Java Basics - Anfänger-Themen 2
W Collection-Problem Java Basics - Anfänger-Themen 35
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
J Objekt in Collection speichern Java Basics - Anfänger-Themen 4
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
J Collection Objekt Java Basics - Anfänger-Themen 3
T Collections Zusammengehörende Strings in einer Collection Java Basics - Anfänger-Themen 2
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
B addAll(Collection<? extends E> c) Java Basics - Anfänger-Themen 9
K Collections Collection für 12 mio Strings Java Basics - Anfänger-Themen 7
Y Collection der eigenen Klasse Java Basics - Anfänger-Themen 10
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
R Passende Collection gesucht Java Basics - Anfänger-Themen 11
G Collections Wahl der richtigen Collection Java Basics - Anfänger-Themen 11
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
D Scala Iterable zu Java Collection konvertieren Java Basics - Anfänger-Themen 3
D Frage zu Collection und deren Anwendung Java Basics - Anfänger-Themen 2
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
J Collection soll übergeben werden... Java Basics - Anfänger-Themen 7
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
B Iterator und Collection Java Basics - Anfänger-Themen 11
G Java Collection Frameworks Java Basics - Anfänger-Themen 5
D Collection Konvertieren Java Basics - Anfänger-Themen 7
K Datentypen Über Collection iterieren bringt fehler Java Basics - Anfänger-Themen 8
K OOP Aus Collection Objekte bestimmter Subklassen entfernen Java Basics - Anfänger-Themen 7
S Welche Collection? Java Basics - Anfänger-Themen 5
S Collection rückwärts durchsuchen Java Basics - Anfänger-Themen 4
W Wie kann ich auf Object meiner Collection zugreifen Java Basics - Anfänger-Themen 7
J Collection Vector Java Basics - Anfänger-Themen 8
T Collection in collection Java Basics - Anfänger-Themen 6
T Collection von Objekten verschiedener Klassen Java Basics - Anfänger-Themen 4
J Collection ArrayList und mit erweitertem for iterieren Java Basics - Anfänger-Themen 7
J Probleme mit Collection ArrayList Java Basics - Anfänger-Themen 2
C Collection vs. LinkedList, Abstrakt vs. Konkret Java Basics - Anfänger-Themen 9
G Collection<BufImg> in Datei speichern Java Basics - Anfänger-Themen 8
A Collection auslesen ohne Objekttyp zu kennen? Java Basics - Anfänger-Themen 11
G Collection<Strings> - Liste von Strings verwalten Java Basics - Anfänger-Themen 9
A Struts: Über Collection iterieren mir Taglibs? Java Basics - Anfänger-Themen 13
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
T Frage zu Vererbung beim Collection-Framework Java Basics - Anfänger-Themen 4
I Frage zu Collection und List Interfaces Java Basics - Anfänger-Themen 2
M Object [][] ist nicht vom Typ Collection? Java Basics - Anfänger-Themen 3
S Collection wie LinkedHashMap Java Basics - Anfänger-Themen 7
J LinkedList, Collection, ArrayList, List. was denn bitte? Java Basics - Anfänger-Themen 6
S Collection Sort Java Basics - Anfänger-Themen 15
A Welche Collection? Java Basics - Anfänger-Themen 13
C Collection in Verbindung mit String.split speicherlastig Java Basics - Anfänger-Themen 20
S Collection in einer Collection Java Basics - Anfänger-Themen 5
A Welche Collection soll ich nehmen? Java Basics - Anfänger-Themen 4
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
K Collection und Iterator Java Basics - Anfänger-Themen 7
I Bestimmte Variablen in Collection Classes Java Basics - Anfänger-Themen 2
M Source Code von Collection Framework, etc. Java Basics - Anfänger-Themen 3
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
K Verständnisfrage Collection, ArrayList und Referenzen Java Basics - Anfänger-Themen 4
S Mit Collection<int[]> umgehen Java Basics - Anfänger-Themen 2
S welche collection ? String und object Java Basics - Anfänger-Themen 5
M gibt es eine collection mit definierter maximaler größe Java Basics - Anfänger-Themen 4
G Collection Framework Java Basics - Anfänger-Themen 8
V Mehrdimensionale Collection? Java Basics - Anfänger-Themen 4
U JSTL: Collection auslesen mit forEach Java Basics - Anfänger-Themen 1
A Interface Collection implementieren? Java Basics - Anfänger-Themen 4
I Collection sortieren, ":" höchste "Priorität& Java Basics - Anfänger-Themen 4
P Äquivalent zu Visual Basic Collection Java Basics - Anfänger-Themen 6
G Collection, aber welche? Java Basics - Anfänger-Themen 6
A Collection<String> Java Basics - Anfänger-Themen 4
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
E Strings in Collection Java Basics - Anfänger-Themen 6
R welche Collection nehmen? Java Basics - Anfänger-Themen 4
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
megachucky Collection Vector: ausgabe klappt nicht richtig Java Basics - Anfänger-Themen 9
T Welche Collection nehmen? HashMap? Java Basics - Anfänger-Themen 4
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
DorFey Schrittweises abändern des GUI während for-Schleife / pausieren einer for-Schleife Java Basics - Anfänger-Themen 3
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
CptK Klassen mouseClicked wird nicht aufgerufen, während man die Maus bewegt Java Basics - Anfänger-Themen 4
U Ausgabe von Dateiinhalt während Programmnutzung fehlerhaft Java Basics - Anfänger-Themen 3
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
R Einfaches refresh während runtime Java Basics - Anfänger-Themen 4
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
E Gui updaten während langer Methode Java Basics - Anfänger-Themen 2
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben