Hashmap Iterator löscht nicht

zwanzig

Mitglied
Hallo! 🙂

Ich sitze schon seit einiger Zeit an einer Sache fest, und zwar das löschen von Elementen aus einer Hashmap mit einem Iterator. Ich habe eine Hashmap in einer Klasse "Edge", und eine weitere in der Klasse "Graph". In dieser soll die Iteration auch stattfinden. In der Klasse Edge gibt es einen Iterator über ihre Elemente. Nun möchte ich mit dem Iterator über HashNode gehen, und bei jedem Element des Tys Node den Iterator über die Elemente von HashEdge starten.

Mein code sieht so aus:
Java:
Iterator<Node> no = Knoten.values().iterator();
while(no.hasNext()){
  c = no.next();
  Iterator<Edge> ca = c.iterator();
    while(ca.hasNext()){
    Edge a = ca.next();
    if(CONDITION){
      ca.remove();
    }
  }
}

Wäre toll wenn jemand mir helfen könnte!!
LG
 
Zuletzt bearbeitet von einem Moderator:
Moin,

nutze bitte Java-Tags, so bekommt man ja Augenkrebs !!

Was ist denn genau Dein Problem?
Eine wirkliche Frage sehe ich nicht .... 😉

Gruß Klaus
 
😀 alles klar. Mein Problem ist, dass ich die Elemente von HashEdge nicht löschen kann. Die Elemente die gelöscht werden sollen bleiben in der Hashmap.

LG
 
Nö, scheinbar nicht .... also:
Java:
Iterator<Node> no = Knoten.values().iterator();
while( no.hasNext() )
{
    c = no.next();
    Iterator<Edge> ca = c.iterator();
    while( ca.hasNext() )
    {
        Edge a = ca.next();
        if(CONDITION)
        {
            ca.remove();
        }
    }
}

Mein Problem ist, dass ich die Elemente von HashEdge nicht löschen kann. Die Elemente die gelöscht werden sollen bleiben in der Hashmap.
und was ist CONDITION?
verrätst Du das auch ??

Gruß Klaus
 
CONDITION ist in dem Fall unwichtig. Ich meine, obwohl es manchmal zu true auswertet, werden trotzdem keine Elemente aus der Hashmap entfernt. Woran kann das liegen?

LG
 
CONDITION ist in dem Fall unwichtig.
Ähm ja, das ist deine Meinung. Der Code funktioniert so, wenn die CONDITION richtig ist. Wenn du uns die nicht verraten willst, kannste ja mal ein paar Ausgaben in den Code reinschreiben, und gucken was passiert:
Java:
if(CONDITION)
{
    System.out.println(a);
    System.out.println(c.anzahlKanten()); // bzw. vergleichbare Methode in Node
    ca.remove();
    System.out.println(c.anzahlKanten());
}
Ansonsten können wir dir wohl nicht helfen.
lg Kevin
 
Zuletzt bearbeitet:
Ich glaub, es kann Probleme geben, wenn du beim Iterieren gleichzeitig was löschst (Concurrent Modification oder so, JavaFX ListView ist z.B. so ein Kandidat). Du könntest beim Iterieren einfach die Elemente, die zu löschen sind, in einer 2. Liste speichern und danach diese Liste durchgehen und dann remove mit dem jeweiligen Objekt machen.
 

Zurück
Oben