私はキーとして整数を使用し、対応する値としてListを持つMapオブジェクトを持っています。ここに私のコードです。HashMapの値が更新されない
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);
}
}
私は2番目のリストが更新されませんその後、明確な声明が含まれていない、と私はprint文では1〜10の2ブロックを取得する場合。 clearコマンドを追加すると、2つのブロックに10-15しか印刷されません。
私の質問は、なぜクリアコマンドが既にマップに追加されたデータをクリアしていて、なぜ新しいデータをリストに追加してマップ上に置くと実際に値が変更されないのでしょうか?
編集:私は私はあなたがマップに追加しているすべてのエントリに同じオブジェクトを使用している二重の値
リストはオブジェクトです。 1つのリスト 'dubList'を作成するだけです。あなたが 'dataDouble'にそれを何回追加しても、それは同じオブジェクト、同じリストになるでしょう。 –
マップ内の値は実際には設定されておらず、代わりにオブジェクト自体を指していますか? –
@PeytonC。オブジェクトの参照を指しているので、それをリストに追加すると、新しいArrayListを初期化していないので、 'dubList'という名前の' ArrayList'への参照を追加しています。 '。 – Orin