为什么 java 设计者强制要求如果 obj1.equals(obj2) 那么 obj1.hashCode() 必须是 == obj2.hashCode()
问问题
155 次
5 回答
9
因为 HashMap 使用以下算法快速找到键:
- 获取
hashCode()
参数中的关键 - 从此哈希码推导出桶
- 将桶中的每个键与参数中的键(使用
equals()
)进行比较以找到正确的键
如果两个相等的对象没有相同的哈希码,那么算法的前两个步骤将不起作用。正是前两个步骤使 HashMap 变得非常快(O(1))。
于 2012-07-24T15:09:08.367 回答
4
没有授权。这是一个很好的做法,因为如果您的对象打算用于基于哈希的数据结构(如 HashMap/HashSet 等),这是一个必需条件。
于 2012-07-24T15:06:39.793 回答
1
因为哈希码用于快速确定两个对象是否不相等。
于 2012-07-24T15:06:55.287 回答
1
据我所知,这并没有融入语言 - 从技术上讲,您可以拥有其 equals() 方法不检查哈希码的对象,但您会得到非常奇特的结果。
特别是,如果您将一堆这些对象放入 HashMap 或 HashSet 中,则映射/集合将使用 hashCode() 方法来确定对象是否可能是重复的 - 因此您可能会遇到一个集合将存储 2 个对象的情况已经定义为等于(这永远不会发生),因为它们每个都返回不同的哈希码。
于 2012-07-24T15:09:59.183 回答
0
它有两个步骤匹配以提高性能。
第一步:计算hashcode()
第二步:计算equals()
这是因为如果你把你的对象作为像 hashmap 这样的集合中的键,你的键将首先在 hashcode() 方法上进行比较,如果它找到匹配的 hashcode,然后继续计算 equals()。
它类似于索引以获得更好的搜索性能
于 2012-07-24T15:07:22.363 回答