gpt4 book ai didi

java - 如何在持有 HashMap 的 Java List 上正确使用 Contains

转载 作者:行者123 更新时间:2023-11-29 06:43:21 25 4
gpt4 key购买 nike

如何在包含 HashMaps 的列表上使用 contains 方法,以便在询问列表是否包含指定的 HashMap< 时返回 true/

例如:

    List ssibenefit = new ArrayList();
HashMap map = new HashMap();
map.put("one", "1");
ssibenefit.add(map);
HashMap map4 = new HashMap();
map4.put("one", "1");

System.out.println("size: " + ssibenefit.size());
System.out.println("does it contain orig: " + ssibenefit.contains(map));
System.out.println("does it contain new: " + ssibenefit.contains(new HashMap().put("one", "1")));

应该返回:

size: 1
does it contain orig: true
does it contain new: true

但在这种情况下实际输出是

size: 1
does it contain orig: true
does it contain new: false

更新

抱歉,我已经更新了问题。当我发布问题时,我意识到我想做的和我问的不是一回事。

最佳答案

恐怕到目前为止(在 Vlad 的回答之前)你得到的答案都是垃圾(这令人惊讶,因为这是非常基本的东西!)。

你的测试在你希望看到 true 的地方打印 false 的原因是 put("one", "1") 返回映射的先前值,而不是您刚刚操作的映射。因此,您对 ssibenefit.contains 的调用是在询问列表是否包含 null。它没有。

另一方面,如果您重写测试:

HashMap newMap = new HashMap();
newMap.put("one", "1");
System.out.println("does it contain new: " + ssibenefit.contains(newMap));

您会看到它打印为真。

如果您阅读 List.contains 的 javadoc , 你会看到它

returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e))

因此,正如其他人断言的那样,它是通过平等而不是身份来运作的。如果你阅读 Map.equals 的 javadoc , 你会看到它

Returns true if the given object is also a map and the two maps represent the same mappings

因此,平等被定义为内容平等,而不是身份平等。将这两者放在一起,您可以看到您尝试做的事情必须适用于任何兼容的 Java 实现。

关于java - 如何在持有 HashMap 的 Java List 上正确使用 Contains,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com