2011-01-06 82 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); 
}