List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> item = new HashMap<String, Object>();
data.clear();
item.clear();
int i = 0;
while (i < 5){
item.put("id", i);
i++;
out.println("id: " + item.get("id"));
out.println("--------------------------");
data.add(item);
}
for(i=0 ; i<5 ; i++){
out.println("print data[" + i + "]" + data.get(i));
}
结果是:
id:0
--------------------------
id:1
--------------------------
id:2
--------------------------
id:3
--------------------------
id:4
--------------------------
打印数据[0] {id = 4}
打印数据[1] {id = 4}
打印数据[2] {id = 4}
打印数据[3] {id = 4}
打印数据[4] {id = 4}
为什么只存储最后一个元素?
答案 0 :(得分:2)
我想你在问为什么HashMap中只存储了一个值。如果是这样的话:
每次拨打Map.put("id", i)
时,您都会覆盖之前的Key,Value对,其中key =“id”。在地图数据结构中,键是唯一的。因此,item只有一个Key,Value对。
如果您问为什么列表中的每个元素都是相同的,就像Nikita所说的那样,每次都将完全相同的HashMap存储到您的列表中。
答案 1 :(得分:1)
因为您反复更改一个哈希映射。在将其添加到列表
时尝试创建副本data.add(new HashMap(item));
答案 2 :(得分:0)
这是因为您只使用该项目的实例。
您必须在每个while循环中实例化该项,如下所示。
while (i < 5){
item = new HashMap<String, Object>();
item.put("id", i);
i++;
out.println("id: " + item.get("id"));
out.println("--------------------------");
data.add(item);
}