具有重复值的java list <map> </map>

时间:2014-12-08 06:25:23

标签: java list map hashmap

我有一个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}]的预期结果?

由于

3 个答案:

答案 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);