2014-12-08 108 views
0

我有一个List<Map>这应该是下面的语法:Java列表<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由2个值defg替换输出。我如何得到[{clientName=abcd}, {clientName=defg}]的预期结果?

谢谢

回答

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); 
+0

谢谢.. :)我会加入它在一个for循环。 – user777777 2014-12-08 06:42:33

+0

重新初始化您的地图<>创建新的地图对象,所以我认为,而不是重新初始化为clientName-1,clientName-2相同的地图添加不同的键。 – mady 2014-12-08 06:55:08

+0

@mady你是正确的,但用户的要求是添加它在同一把钥匙上。她还提到'以前我有列表,我想用列表替换'它表示键名对于不同的对象是相同的。 – 2014-12-08 07:01:36

1

首先阅读地图和列表。当您将一个Map对象(或任何其他对象)添加到List对象时,您所做的只是在列表中添加对该对象的引用。

这意味着如果您在将其添加到List对象后更改了Map内容,那么它将反映在List中。

此外,在地图中,关键必须是唯一的。

所以在这里你需要创建一个新的Map对象,然后才能添加新的值并将新的Map对象添加到列表中。

看到这个其他职位的详细信息:copying a java hashmap

+1

Ok..so for循环中的创建地图和添加值到它,做这项工作对我来说..日Thnx – user777777 2014-12-08 06:38:55

1

尝试下面的代码,地图的关键应该是唯一的,所以当你把价值相同的密钥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);