我有一個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);
}
}
如果我不包括明確的說法則沒有更新的第二個列表,和我在打印語句二月1日至10日的塊。如果我添加了清除命令,則只在兩個塊中打印10-15。
我的問題是,爲什麼清除命令清除已經添加到地圖中的數據,以及爲什麼向列表中添加新數據並將其放到地圖上並不會實際更改值?
編輯:我知道我使用的雙不是int,在我的實際項目中我處理的雙重價值
列表是對象。你只創建一個'dubList'列表。無論你將它添加到'dataDouble'多少次,它都將是同一個對象,同一個列表。 –
因此,地圖中的值並未實際設置,而只是指向對象本身? –
@PeytonC。正確的,因爲它指向的是對象的引用,所以當你將它添加到列表中時,你只是將引用添加到名爲'dubList'的ArrayList中,該對象中有0-15個元素,因爲你從未初始化過一個新的'ArrayList '。 – Orin