gpt4 book ai didi

java - HashMap 不调用 Object.equals?

转载 作者:搜寻专家 更新时间:2023-11-01 01:17:59 27 4
gpt4 key购买 nike

我编写了一个重写类 Object 中的 equals(Object) 方法的类,以使用对象的实例值将该类类型的对象与该类类型的其他对象进行比较。

当我将对象的实例作为键放入 HashMap 中,然后使用一个新的但相同的对象作为键在映射上调用 get(Object) 时,它返回 null。

我试过将一个新的相同对象传递给 equals 方法,它返回 true,所以问题不在我的比较代码上。

根据我通过调试收集到的信息,我的对象中的 equals(Object) 方法从未被调用。

但如果您在 HashMap 中使用 String 键,然后将具有相同字符的新实例传递给 get(Object),它会成功返回值。

为什么会这样?要使用基于我的 equals 方法的 HashMap 测试键,我需要做什么?

最佳答案

您还需要覆盖 Object.hashcode() .查看链接,因为它指定 hashcode()equals() 有一个契约(Contract)来确保 HashTable 的正确功能、HashMapHashSet

HashMap 中,值存储在桶中,桶是通过键的哈希码到达的。一旦找到合适的桶,equals 方法就会应用于桶的每个成员,直到确定相等为止。因此,确保您的哈希算法“哈希良好”非常重要。

关于java - HashMap 不调用 Object.equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10919941/

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