【问题标题】:HashSet with HashMap is showing wrong values [duplicate]带有 HashMap 的 HashSet 显示错误的值 [重复]
【发布时间】:2016-09-18 06:00:21
【问题描述】:

当我尝试在 HashSet 中添加 HashMap 时,它显示的值有误。

代码

HashSet<HashMap> arList = new HashSet<HashMap>();
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("name", "Amit");
hm.put("device_id", "192.168.1.100");
hm.put("ip", "192.168.1.100");
System.out.println("hm:"+hm);
arList.add(hm);
//add again
arList.add(hm);

hm.put("name", "Mani");
hm.put("device_id", "192.168.1.102");
hm.put("ip", "192.168.1.102");
arList.add(hm);

System.out.println("hm:"+hm);
System.out.println("arList: " + arList);

输出

hm:{name=Amit, device_id=192.168.1.100, ip=192.168.1.100}
hm:{name=Mani, device_id=192.168.1.102, ip=192.168.1.102}
arList: [{name=Mani, device_id=192.168.1.102, ip=192.168.1.102}, {name=Mani, device_id=192.168.1.102, ip=192.168.1.102}]

预期输出

hm:{name=Amit, device_id=192.168.1.100, ip=192.168.1.100}
hm:{name=Mani, device_id=192.168.1.102, ip=192.168.1.102}
arList: [{name=Amit, device_id=192.168.1.100, ip=192.168.1.100}, {name=Mani, device_id=192.168.1.102, ip=192.168.1.102}]

【问题讨论】:

  • 添加对集合的引用时,只会添加该引用。它不会添加引用对象的副本。

标签: java hashmap unique hashset


【解决方案1】:

您的 hm 变量指向一 (1) 个 HashMap 实例,该实例随后被添加到 HashSet 两次(甚至三次,使用您的 // add again 块)。 HashMap 实例将包含最后放置的值,并且该集合将包含对同一地图的两个(或三个)引用。

创建两个单独的HashMap 实例以使其正常工作:

HashSet<HashMap> hs = new HashSet<HashMap>();
HashMap<String, String> hm1 = new HashMap<String, String>();
hm1.put("name", "Amit");
hm1.put("device_id", "192.168.1.100");
hm1.put("ip", "192.168.1.100");

hs.add(hm1);

HashMap<String, String> hm2 = new HashMap<String, String>();
hm2.put("name", "Mani");
hm2.put("device_id", "192.168.1.102");
hm2.put("ip", "192.168.1.102");

hs.add(hm2);

【讨论】:

    猜你喜欢
    • 2018-05-15
    • 2015-09-11
    • 2015-02-05
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2012-10-08
    • 2023-04-10
    • 2015-05-12
    相关资源
    最近更新 更多