HashMap - alle keys haben values der letzten put-Anweisung

CodeIt

Aktives Mitglied
Hallo,
ich habe folgenden Code:

Code:
HashMap<Integer, HashMap<Integer, Integer>> kkk = new HashMap<Integer,
                HashMap<Integer, Integer>>();
       
HashMap<Integer, Integer> iiiii = new HashMap<Integer, Integer>();
iiiii.put(1, 2);
System.out.println(iiiii);
       
kkk.put(1, iiiii);
       
System.out.println(kkk);
iiiii.clear();
System.out.println(iiiii);
       
iiiii.put(2, 3);
       
kkk.put(2, iiiii);
       
System.out.println(iiiii);
System.out.println(kkk);

Zum Schluss sollte eigentlich die HashMap kkk wie folgt ausgegeben werden:
{1={1=2}, 2={2=3}}, was aber nicht geschieht.
Stattdessen erhalte ich folgende Ausgabe:
{1=2}
{1={1=2}}
{}
{2=3}
{1={2=3}, 2={2=3}}.

Ich erhalte zum Schluss also statt {1={1=2}, 2={2=3}} die Ausgabe {1={2=3}, 2={2=3}}. Der letzte hinzugefügte Wert für key = 2 wird also auch key = 1 hinzugefügt.
Woran kann das liegen? Was mache ich falsch?

Vielen Dank
 
Es gibt nur ein Object iiiii, dass du sowohl für key 1 als auch für key 2 eingefügt hast.
Beide Keys zeigen also auf das gleiche Objekt.
Wenn du 2 unterschiedliche Objekte drin haben willst, dann musst du "iiiii.clear()" durch "iiiii = new HashMap<Integer, Integer>();" ersetzen.
 
Beide kkk puts zeigen auf das selbe (innere) Map Objekt. Da du dieses erst leerst (clear) und dann einen neuen put (2,3) machst, ist dieser Eintrag der einzigste in dieser (inneren) Map. Beide keys der kkk-Map (1 und 2) zeigen also wie gesagt auf ein und das selbe (innere) Map Objekt.
 

Zurück
Oben