今天開發遇到的問題,想用map裝數據,只是在for循環之外new了一個map,想做for中用,改變裏面的值,放入list中,結果導致數據都是一樣的,最後只有每次新new一個對象
代碼:
for (int i=0;i<collection.size();i++) {
//注意:這裏沒有采用同一個map對象,每次都是new的新對象,如果採用的是同一個對象,list
//存儲的就是之前map地址的引用,當map的值進行改變,list存的值就會改變,因爲list中存
//的不是值,是map對象地址的引用。用同一個map對象,所以導致list中值都是一樣的,並且和
//最後一個map值相等
Map<String, String> map = new HashMap<String, String>(1);
Document d = collection.get(i);
map.put("date", d.get("LogTime").toString());
map.put("count", d.get("questions").toString());
listQus.add(map);
Map<String, String> map1 = new HashMap<String, String>(1);
map1.put("date", d.get("LogTime").toString());
map1.put("count", d.get("comSelect").toString());
listSelect.add(map);
Map<String, String> map2 = new HashMap<String, String>(1);
map2.put("date", d.get("LogTime").toString());
map2.put("count", d.get("comInsert").toString());
listInsert.add(map);
Map<String, String> map3 = new HashMap<String, String>(1);
map3.put("date", d.get("LogTime").toString());
map3.put("count", d.get("comUpdate").toString());
listUpdate.add(map);
Map<String, String> map4 = new HashMap<String, String>(1);
map4.put("date", d.get("LogTime").toString());
map4.put("count",d.get("comDelete").toString());
listDelete.add(map);
}
但是感覺解決比較蠢
井底之蛙,坐井觀天,學無止境 記錄。