我试图创建一个地图列表.在下面的代码中,我期待得到
[{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());
将空白地图添加到您从未填充的列表中的内容.
也许值得一提的是,你应该定义你在List中使用的元素的类型,对于HashMap来说,它是不可能的,因为你混合了整数和字符串.
另一件事是你应该使用List接口作为类型,这样你就可以在将来更改实现(ArrayList或其他).
这里更正的代码:
Map mMap = new HashMap();
List<Map> list = new ArrayList();
Run Code Online (Sandbox Code Playgroud)