tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
411
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sebastianb sebastianb ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    125
    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.


    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    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
     

  2. #2
    sebastianb sebastianb ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    125
    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 =)

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    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 =)
     

  3. #3
    SE Tutorials.de Gastzugang
    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
     

Ähnliche Themen

  1. elemente auf Panel löschen
    Von BetaRR400 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 19.02.08, 12:12
  2. Elemente aus Array löschen
    Von Morphinus21 im Forum Java
    Antworten: 4
    Letzter Beitrag: 30.01.08, 10:15
  3. Dom Elemente hinzufügen und löschen
    Von Stefan Miefert im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 15.09.06, 06:07
  4. [c++] vector elemente löschen
    Von Aiju im Forum C/C++
    Antworten: 13
    Letzter Beitrag: 05.02.06, 12:20
  5. [VB.NET] Ausgewählte Elemente löschen
    Von forsterm im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 19.11.05, 16:09