我有一个List<Map>
,它应该是以下语法:
[{clientName=abcd}, {clientName=defg}]
之前我有List<Bean>
我要用List<Map>
替换。
这是我的代码:
List<Map> clientList=new ArrayList<Map>();
Map<String,String> clientNameMap = new HashMap<String,String>();
clientNameMap.put("clientName","abcd");
clientList.add(clientNameMap);
clientNameMap.put("clientName","defg");
clientList.add(clientNameMap);
此代码会发生什么情况,我将[{clientName=defg}, {clientName=defg}]
作为输出,其中clientName=abcd
被第二个值defg
替换。如何获得[{clientName=abcd}, {clientName=defg}]
的预期结果?
由于
答案 0 :(得分:3)
在添加到Map<>
之前,您必须重新初始化List<>
,因为您正在更改Map<>
对象的先前引用以及同样会更改上一个对象的键。
你的代码应该是:
List<Map> clientList=new ArrayList<Map>();
Map<String,String> clientNameMap = new HashMap<String,String>();
clientNameMap.put("clientName","abcd");
clientList.add(clientNameMap);
clientNameMap = new HashMap<String,String>(); //Initialize it again.
clientNameMap.put("clientName","defg");
clientList.add(clientNameMap);
答案 1 :(得分:1)
首先阅读地图和清单。将Map对象(或任何其他对象)添加到List对象时,您所做的只是在List中添加对该对象的引用。
这意味着如果在将Map内容添加到List对象后更改Map内容,则会将其反映在List中。
此外,在地图中,密钥必须是唯一的。
所以在这里你需要创建一个新的Map对象,然后才能添加新值并将新的Map对象添加到列表中。
有关详情,请参阅此其他帖子:copying a java hashmap
答案 2 :(得分:1)
尝试下面的代码,Map键应该是唯一的,所以当你将值放到同一个键n次时,只需替换键的值,在你的代码中你要替换相同键的值(clientName)并将其添加到列表中所以它打印的是你最后放在地图上的相同值。
List<Map> clientList=new ArrayList<Map>();
Map<String,String> clientNameMap = new HashMap<String,String>();
clientNameMap.put("clientName-1","abcd");
clientList.add(clientNameMap);
clientNameMap.put("clientName-2","defg");
clientList.add(clientNameMap);