簡體   English   中英

Java:創建一個HashMaps列表

[英]Java: create a list of HashMaps

我試圖創建一個地圖列表。 在下面的代碼中,我期待得到

[{start=1,text=ye}, {start=2,text=no}]

但是,我只有

[{start=2,text=no}, {start=2,text=no}]

如何避免覆蓋第一張地圖? 這是我的代碼:

HashMap mMap = new HashMap();
ArrayList list = new ArrayList();
list.add(new HashMap());
mMap.put("start",1);
mMap.put("text","yes");
list.add(mMap); 
mMap.put("start",2);
mMap.put("text","no");
list.add(mMap); 
System.out.println("Final result: " + list );

謝謝!

==========================

作為一名來自程序語言背景(SAS)的Java學習者,我花了不少時間學習和試驗ArrayList,LinkedList,Map,LinkedMap等等 - 我感到很冷靜。 我不明白為什么我的知識有限。 現在,以下答案都很棒! 他們在Java中解釋了非常重要的數據結構,至少對我而言。

謝謝你們!!!!

您需要為每個條目創建一個新的HashMap,而不是重用現有的HashMap。 這可行:

HashMap mMap = new HashMap();
mMap.put("start",1);
mMap.put("text","yes");
list.add(mMap); 
mMap = new HashMap(); // create a new one!
mMap.put("start",2);
mMap.put("text","no");
list.add(mMap); 

另外,你可以刪除list.add(new HashMap()); 因為這會在您的列表中添加一個永不填充的空映射。

也許值得一提的是,你應該定義你在List中使用的元素的類型,對於HashMap來說,它是不可能的,因為你混合了整數字符串

另一件事是你應該使用List接口作為類型,這樣你就可以在將來更改實現( ArrayList或其他)。

這里更正的代碼:

Map mMap = new HashMap();
List<Map> list = new ArrayList();

是的,這段代碼的哈希映射

list.add(new HashMap());

永遠不會被引用。 所以最終你得到了3個項目的清單,其中2個是相同的。

您永遠不會保存對此Map的引用:

list.add(new HashMap());

有三個添加到列表中。 第一個添加是一個新的地圖實例; 你永遠不會設置任何值。 第二個添加你傳遞給nMap的引用,它有1,是的。 第三個添加你傳遞相同的引用。 所以Map現在有3個引用,第一個是你從未添加任何值的地圖,下一個是同一個地圖。 這就是為什么你得到相同的輸出。

當您在地圖中放置相同的鍵名稱時,值將被覆蓋到相同的鍵。 假設我們有

mMap.put("start",1);
mMap.put("start",2);
mMap.put("start",3);
mMap.put("start",4);

它不會生成長度為4的映射,因為鍵(“start”)是相同的,因此它將覆蓋同一個鍵上的值。 因此,您將獲得“start”鍵只獲得一個值(4)。 為了避免這種情況,你必須在hashmap中更改鍵的名稱,但在你的scenaro中,你需要一個hashmap的另一個實例來保存鍵和值,因為你維護了arralist。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM