【问题标题】:java list<map> with repeated values具有重复值的 java list<map>
【发布时间】:2015-02-05 18:48:57
【问题描述】:

我有一个List&lt;Map&gt;,它的语法应该如下:

[{clientName=abcd}, {clientName=defg}]

以前我有List&lt;Bean&gt;,我想用List&lt;Map&gt; 替换它。

这是我的代码:

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}]

谢谢

【问题讨论】:

    标签: java list map hashmap


    【解决方案1】:

    在添加到List&lt;&gt; 之前,您必须再次重新初始化您的Map&lt;&gt;,因为您正在更改Map&lt;&gt; 对象的先前引用,并且相同的键也会更改先前的对象。

    你的代码应该是:

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

    【讨论】:

    • 谢谢.. :) 我将在 for 循环中添加它。
    • 重新初始化你的地图会创建新的地图对象,所以我认为与其重新初始化为相同的地图添加不同的键作为clientName-1,clientName-2会很好..
    • @mady 你是对的,但用户要求将它添加到同一个键上。她还提到Previously I had List&lt;Bean&gt; which I want to replace with List&lt;Map&gt;这意味着不同对象的键名相同。
    【解决方案2】:

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

    也就是说,如果你在添加到List对象后改变了Map的内容,就会在List中体现出来。

    此外,在 Map 中,键必须是唯一的。

    因此,您需要先创建一个新的 Map 对象,然后才能添加新值并将该新 Map 对象添加到列表中。

    详情见此帖:copying a java hashmap

    【讨论】:

    • 好的..所以在 for 循环中创建地图并为其添加值,为我完成了这项工作.. Thnx
    【解决方案3】:

    尝试下面的代码,映射键应该是唯一的,因此当您将值放入相同的键 n 次时,该值将被替换为键,在您的代码中,您将替换相同键的值(客户端名称)并将其添加到列表中所以它打印的值与您最后输入的值相同。

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

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2017-07-14
      相关资源
      最近更新 更多