Ich habe ein Map-Objekt, in dem Ganzzahlen als Schlüssel und Listen als entsprechende Werte verwendet werden. Hier ist mein Code.HashMap-Werte werden nicht aktualisiert
Map<Integer, List<Double>> dataDouble = new HashMap<Integer, List<Double>>();
List<Double> dubList = new ArrayList<Double>();
for(double i = 0; i < 10; i++)
dubList.add(i);
dataDouble.put(1, dubList);
//dubList.clear();
for(int i = 10; i < 16; i++)
dubList.add(i);
dataDouble.put(2, dubList);
Set<Integer> keyset = dataDouble.keySet();
for(Integer key : keyset) {
System.out.println("\t\tKEY: " + key);
List<Double> finList = dataDouble.get(key);
for(double value : finList)
System.out.println("VALUE: " + value);
}
}
Wenn ich beinhalten nicht die klare Aussage dann die zweite Liste nicht aktualisiert wird, und ich bekomme 2 Block von 1 bis 10 in den Druckanweisungen. Wenn ich den Löschbefehl hinzufüge, wird nur 10-15 in den zwei Blöcken gedruckt.
Meine Frage ist, warum löscht der Befehl clear löschen Daten bereits zur Karte hinzugefügt, und auch warum ändert das Hinzufügen neuer Daten zu der Liste und das Setzen auf der Karte nicht tatsächlich die Werte?
Edit: Ich weiß, ich bin mit Doppel statt int, die ich in meinem aktuellen Projekt mit Double-Werten befasse
Listen sind Objekte. Sie erstellen immer nur eine Liste 'dubList'. Egal, wie oft Sie es zu "dataDouble" hinzufügen, es wird das gleiche Objekt, die gleiche Liste sein. –
Also die Werte in der Karte sind nicht wirklich festgelegt, stattdessen nur auf das Objekt selbst zeigen? –
@PeytonC. Korrekt, da es auf eine Referenz des Objekts zeigt, wenn Sie es der Liste hinzufügen, fügen Sie einfach den Verweis auf die 'ArrayList' namens' dubList' hinzu, die 0-15 enthält, da Sie nie eine neue 'ArrayList initialisiert haben '. – Orin