2011-01-06 107 views
1
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)); 
} 
的那

结果是:的servlet的ArrayList和HashMap

ID:0
------------------------- -
ID:1个
--------------------------
ID:2
--------- -----------------
id:3
--------------------------
id:4
--------------------------
print data [0] {id = 4}
print data [1 ] {ID = 4}
打印数据[2] {ID = 4}
打印数据[3] {ID = 4}
打印数据[4] {ID = 4}

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

回答

1

因为你多次改变一个哈希映射。尝试创建一个副本,当你把它添加到列表中

data.add(new HashMap(item)); 
2

我觉得你问为什么只有一个存储在HashMap中值。如果是这样的话:

每次通话时间Map.put("id", i)要覆盖以前的键,值对,其中键=“ID”。在地图数据结构中,密钥是唯一的。所以物品只有一个Key,Value对。

如果你问为什么在你的列表中的每个元素是相同的,还有尼基塔说,要存储的完全一样的HashMap到你的列表中的每个时间。

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