我有一個哈希圖,其中鍵為整數,值作為日期列表。我正在嘗試更新特定整數的值之一。最初,所有鍵的日期都相同?,F在,我想將日期之一設置為 null 到 101 鍵,當我更新特定鍵時,它會針對所有鍵進行更新。我在哪里做錯了?請建議。這是我的代碼最初的日期是這樣設置的 // Set dates to all records resultDate = [Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999] // Typo here Set<Integer> records= parsedResults.keySet(); if (records.size() > 0) { for (Integer record: records) { dateMap.get(Integer.parseInt(record)); dateMap.put(record,resultDate); } }然后僅將 101 的結束日期更新為 nullfor (Map.Entry<Integer, List<Date>> entry : dateMap.entrySet()) { if(entry.getKey().equals(Integer.parseInt("101"))) { List<Date> dates = entry.getValue(); if(null == effDate) { dates.set(0, null); } else { dates.set(0, effDate); } if(null == endDate) { dates.set(1, null); } else { dates.set(1, endDate); } dateMap.put(Integer.parseInt("101"), dates); } }初始 dateMap 響應{101=[Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999], 102=[Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999], 103=[Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999]}當我更新為 null 之后,{101=[Mon Jan 01 00:00:00 IST 2018, null], 102=[Mon Jan 01 00:00:00 IST 2018, null], 103=[Mon Jan 01 00:00:00 IST 2018, null]}
2 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
問題是對于您配對相同列表對象的每個鍵,在 for 循環中使用new ArrayList(Collection<? extends E> c)構造函數每次創建新對象
if (records.size() > 0) {
for (Integer record: records) {
dateMap.get(Integer.parseInt(record)); //you can remove this line
dateMap.put(record,new ArrayList(resultDate));
}
}
公共 ArrayList(集合 c)
按照集合的迭代器返回的順序構造一個包含指定集合元素的列表。

偶然的你
TA貢獻1841條經驗 獲得超3個贊
您的值可能使用一個帶有 diff 別名的列表
List one = new AraayList();
map.put("k1", one);
map.put("k2", one);
List alias = one;
map.put("k3", alias);
這些值使用相同的實例,當您更新一個時,其他的會看到更改。
添加回答
舉報
0/150
提交
取消