HashMap Elemente löschen

sebastianb

Erfahrenes Mitglied
Morgen Zusammen,

leider bin ich gerade auf ein Problem gestoßen, dass zwar an sich recht trivial ist aber ich mir noch nie wirklich Gedanken darüber gemacht habe.
Ich will lediglich aus einer HashMap Elemente rauslöschen deren Schlüssel auf eine gewisse Bedingung match.


Java:
Map<Integer, String> test = new HashMap<Integer, String>();

		test.put(1, "a");
		test.put(2, "b");
		test.put(3, "c");
		test.put(4, "d");
		test.put(5, "e");
		test.put(6, "f");

		
		for (Integer i : test.keySet())
		{
			if (i % 2 == 0)
			{
				test.remove(i);
			}
		}

Dieses Beispiel wirft wie zu erwarten einen java.util.ConcurrentModificationException, da ich ja durch das löschen des Elementes auch das Set über das ich gerade durchiteriere verändere.

Die einzigen beiden Lösungen wären aus meiner Sicht:

- die zu löschende Keys in eine seperate Liste speichern und anhand derere später die Werte aus der HashMap löschen

- Das Key-Set kopieren

Beide Möglichkeite sind aber für meinen Fall sehr ungeeignet, da ich mit sehr großen Datenmengen zu tun habe und so die Performance erheblich darunter leiden würde.
Für einen knackige Idee wäre ich sehr Dankbar! :)

Viele Grüße

Sebastian
 
Au man da such ich schon den ganzen Morgen nach einer Lösung und sobald ich mein Problem hier gepostet habe, kommt mir die Erläuchtung =)

Java:
for (Iterator<Integer> it = test.keySet().iterator(); it.hasNext();)
		{
			Integer s = it.next();
			
			if (s%2==0)
			{
				it.remove();
			}
		}

Da ja die ForEach auf einen Iterator basiert sollte man eben auch auf dessen Remove-Funktionalität zugreifen :)

Trotzdem Danke =)
 
Makiere deinen Thread bitte als erledigt.

PS : schön das du
1) selbst eine Lösung gefunden hast , manchmal sieht man halt den Wald vor lauter Bäumen nicht
2) das du diese Lösung hier gepostet hast so das alle die danach in Zukunft suchen auch etwas davon haben
 
Zurück