Java:创建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 list = new ArrayList(); 

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

 list.add(new HashMap()); 

永远不会被引用。 所以最终你得到了3个项目的清单,其中2个是相同的。

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

 list.add(new HashMap()); 

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