Referenzen Problem
-
Also ich habe eine Art Multi Map mit diesem Aufbau:
Map<String, Map<Integer, ArrayList<String>>> _keyMap
Die innere Map ist quasi am anfang für alle gleich bzw. hat die selben Werte. Ich initialisiere die äußere Map mittels Schleife:
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.
Wie löse ich das Dilemma am besten?
Danke!
-
Du löst das Problem, indem Du defensive Kopien benutzt:
for _keyMap.put(key[i], new HashMap<Integer, List<String>>>(someMap)); endfor
-
Es funktioniert leider nicht, wie gedacht. So erstelle ich die Map:
Iterator it = someMap.keySet().iterator(); while (it.hasNext()) { Integer tmpKey = (Integer) it.next(); ArrayList<String> tmpVals = (ArrayList<String>) someMap.get(tmpKey); tmpMap.put(new Integer(tmpKey), new ArrayList<String>(tmpVals)); } //tmpMap = (LinkedHashMap<Integer, ArrayList<String>>) someMap.clone(); this.keyMap.put(currentKey.toString(), new LinkedHashMap<Integer, ArrayList<String>>(tmpMap));
Dennoch sind alle ArrayList Listen verändert, wenn nur bei einer ein Wert gelöscht wird.
Ich versteh es nicht.
-
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.