Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Die innere Map ist quasi am anfang für alle gleich bzw. hat die selben Werte. Ich initialisiere die äußere Map mittels Schleife:
Code:
for
_keyMap.put(key[i], someMap);
endfor
So, jetzt wird nach und nach aus manchen inneren Maps der Wert verändert, es wird ein Wert aus der ArrayList gelöscht, um genau zu sein.
Leider hab ich nun wohl das Problem, dass someMap eine Referenz ist in jeder Eintrag von keyMap, d. h. lösche ich aus key[2] einen Eintrag aus der ArrayList aus der inneren Map, dann haben auch alle anderen key[X] diese veränderte Map. Was nicht sein soll!
Relativ einfach Lösung: Du musst dich drum kümmern, dass die Objekte vorm Einfügen geklont werden. Das ist zwar programmier- und laufzeitaufwendiger, aber relativ sicher.
Die Collections speichern eben nur die Referenz auf das eingefügte Objekt und duplizieren das Objekt nicht vorher (geht auch erstmal nicht).
Musst mal schauen, ob im Collections-Toolkit vllt. schon was vorgesehen ist, was dir bei deiner Arbeit hilft, ansonsten musst du eben den new-Operator und ggf. clone()-Methoden bemühen.
dein Programm enthält weder eine Änderung noch eine Überprüfung des Inhalts,
verständlich oder gar einfach oder zumindest ausführbar ist es auch nicht,
du hast zig verschiede Maps und Listen, es ist unklar um welche es geht,
Sorry, war etwas konfus. Habe die Namen angepasst.
Aber es geht offensichtlich jetzt doch. Ich habe ausversehen die auskommentierte Zeile in meinem code nicht auskommentiert gehabt und die Folge war, es wurde immernoch mit referenzen (trotz clone ?) gearbeitet.
Erst wenn ich die Zeile auskommentiere, dann wird ist der "Referenz Effekt" nciht mehr da.
Kannst du etwas mehr Code zur Verfügung stellen, etwa ein lauffähiges Beispiel mit einer Ausgabe, die auf den ungewollten Zustand hinweist? Bei solchen Map<Map<List>>-Konstrukten bekomm ich sonst Kopfschmerzen beim Code-Drüber-Gucken
Da in der ArrayList Strings drinne stehen, gibt es dort erstmal keine Probleme bei Neuzuweisungen. Sprich:
Code:
List<String> l1 = new ArrayList<String>();
List<String> l2 = new ArrayList<String>();
String s1 = "Wert 1";
String s2 = "Wert 2";
/* Listen bekommen das selbe Element */
l1.add(s1); l2.add(s1);
/* keine Aenderung an Liste, da String immutabel ist */
l2.set(0, s2);
/* klappt */
assert(l1.get(0).equals(s1));
Dein Code wird ein wenig besser lesbarer, wenn du die Java 1.5-Iteratoren nimmst, also z.B.
Code:
for (Integer tmpKey : _condHcRuleIdsMap.keySet()) {
ArrayList<String> tmpVals = _condHcRuleIdsMap.get(tmpKey); /* ist ja typisiert, also brauchst du hier keinen Cast */
...
}