为什么java设计师强制要求 如果是obj1.equals(obj2)那么 obj1.hashCode()必须是== obj2.hashCode()
答案 0 :(得分:9)
因为HashMap使用以下算法快速查找键:
hashCode()
equals()
)以找到正确的密钥如果两个相等的对象没有相同的哈希码,则算法的前两个步骤将不起作用。而且这两个使HashMap非常快的第一步(O(1))。
答案 1 :(得分:4)
没有授权。这是一个很好的做法,因为如果您的对象要用于基于哈希的数据结构(如HashMap / HashSet等),这是一个必需条件。
答案 2 :(得分:1)
因为哈希码用于快速确定两个对象是否不相等。
答案 3 :(得分:1)
据我所知,这些语言没有被烘焙 - 你可以在技术上拥有equals()方法不会检查哈希码的对象,但你会得到非常奇特的结果。
特别是如果你将一堆这些对象放入HashMap或HashSet中,map / set将使用hashCode()方法来确定对象是否可能是重复的 - 所以你可以有一个集合将存储的情况2您已定义为equals(永远不会发生)的对象,因为它们各自返回不同的hashCodes。
答案 4 :(得分:0)
这两个步骤匹配以提高性能。
第一步:计算hashcode()
第二步:计算equals()
这是因为如果你把你的对象作为密钥放在像hashmap这样的集合中,你的密钥将首先在hashcode()方法上进行比较,如果它找到匹配的哈希码,那么它会继续计算equals()。
就像索引更好的搜索效果一样