今天开发遇到的问题,想用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);
}
但是感觉解决比较蠢
井底之蛙,坐井观天,学无止境 记录。