Java:创建一个HashMaps列表

时间:2010-11-04 19:29:54

标签: java arraylist

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

[{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中解释了非常重要的数据结构,至少对我而言。

谢谢大家!!!!

6 个答案:

答案 0 :(得分:32)

您需要为每个条目创建一个新的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());,因为这会将空地图添加到您从未填充的列表中。

答案 1 :(得分:6)

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

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

这里是更正后的代码:

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

答案 2 :(得分:1)

是的,来自这段代码的哈希映射

list.add(new HashMap());
永远不会引用

。所以最终你得到了3个项目的清单,其中2个是相同的。

答案 3 :(得分:0)

您永远不会保存对此地图的引用:

list.add(new HashMap());

答案 4 :(得分:0)

列表中有三个添加内容。第一个添加是一个新的地图实例;你永远不会设置任何值。第二个添加你传递给nMap的引用,它有1,是的。第三个添加你传递相同的引用。所以Map现在有3个引用,第一个是你从未添加任何值的地图,下一个是同一个地图。这就是为什么你得到相同的输出。

答案 5 :(得分:0)

当您在地图中输入相同的键名时,值将被覆盖为相同的键。 假设我们有

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

它将不会生成长度为4的映射,因为键(“ start”)相同,因此它将覆盖同一键上的值。因此您只能通过“开始”键获得一个值(4)。 为了避免这种情况,您必须在哈希图中更改键的名称,但是在您的scenaro中,您需要另一个哈希图实例来保存键和值,因为您要维护arralist。