为什么java设计者强制要求如果obj1.equals(obj2)那么obj1.hashCode()必须是== obj2.hashCode()

smc*_*smc 3 java equals hashcode

为什么java设计者强制要求如果obj1.equals(obj2)那么obj1.hashCode()必须是== obj2.hashCode()

JB *_*zet 9

因为HashMap使用以下算法快速查找键:

  • 得到hashCode()论证中的关键
  • 从此哈希码中推断出存储桶
  • 比较存储桶中的每个键与参数中的键(使用equals())以找到正确的键

如果两个相等的对象没有相同的哈希码,则算法的前两个步骤将不起作用.而这正是使HashMap非常快的两个第一步(O(1)).