servlet ArrayList和HashMap

时间:2011-01-06 00:38:37

标签: java data-structures map hashmap

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}

为什么只存储最后一个元素?

3 个答案:

答案 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);
}