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.add(new HashMap());
永远不会被引用。 所以最终你得到了3个项目的清单,其中2个是相同的。
您永远不会保存对此地图的引用:
list.add(new HashMap());
有三个添加到列表中。 第一个添加是一个新的地图实例; 你永远不会设置任何值。 第二个添加你传递给nMap的引用,它有1,是的。 第三个添加您传递相同的引用。 所以Map现在有3个引用,第一个是你从未添加任何值的地图,下一个是同一个地图。 这就是为什么你得到相同的输出。