Java:创建一个HashMaps列表

joh*_*ohn 11 java arraylist

我试图创建一个地图列表.在下面的代码中,我期待得到

[{start=1,text=ye}, {start=2,text=no}]
Run Code Online (Sandbox Code Playgroud)

但是,我只有

[{start=2,text=no}, {start=2,text=no}]
Run Code Online (Sandbox Code Playgroud)

如何避免覆盖第一张地图?这是我的代码:

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 );
Run Code Online (Sandbox Code Playgroud)

谢谢!

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

作为一名来自程序语言背景(SAS)的Java学习者,我花了不少时间学习和试验ArrayList,LinkedList,Map,LinkedMap等等 - 我感到很冷静.我不明白为什么我的知识有限.现在,以下答案都很棒!他们在Java中解释了非常重要的数据结构,至少对我而言.

谢谢你们!!!!

Luk*_*man 36

您需要为每个条目创建一个新的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); 
Run Code Online (Sandbox Code Playgroud)

此外,您可以删除list.add(new HashMap());将空白地图添加到您从未填充的列表中的内容.


Pri*_*ine 6

也许值得一提的是,你应该定义你在List中使用的元素的类型,对于HashMap来说,它是不可能的,因为你混合了整数字符串.

另一件事是你应该使用List接口作为类型,这样你就可以在将来更改实现(ArrayList或其他).

这里更正的代码:

Map mMap = new HashMap();
List<Map> list = new ArrayList();
Run Code Online (Sandbox Code Playgroud)