gpt4 book ai didi

java - HashSet h 和元素 e 如何保持 : h. contains(e) != new HashSet<>(h).contains(e)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:21 26 4
gpt4 key购买 nike

在 Java 8 中,我有一个 HashSet h(由泛型正确输入),hashCode/equals 方法实现到类型层次结构的底部 - 显然是正确的,因为 eclipse 为我做了。

在某些(罕见的)情况下,方法调用 h.contains(e) 返回 false - 这是错误的(根据我的理解),因为集合中有一个元素 e' 具有相等的 hashCodes 和 equals 方法 e。 equals(e') 返回真。

为了让我更加困惑,new HashSet<>(h).contains(e)返回正确答案 true。

这怎么可能?

由于这种罕见的情况是在一个难以追溯的大程序中的某个时刻生成的,因此我无法提供 MWE,但如果需要我可以提供更多信息。

最佳答案

如果您向 HashSet 添加一个元素,更改该元素的某些用于计算 hashCode() 的属性(从而更改该元素的 hashCode() ) 然后调用 contains(e),它根据 hashCode() 的新值搜索元素,但找不到它,因为它存储在与 hashCode() 的旧值匹配的位置。当您将元素放入新的 HashSet 时,它会存储在与新的 hashCode 匹配的位置,因此 contains 有效。

关于java - HashSet h 和元素 e 如何保持 : h. contains(e) != new HashSet<>(h).contains(e)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169905/

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