java - 为什么 java 设计者强制要求 if obj1.equals(obj2) then obj1.hashCode() MUST Be == obj2.hashCode()

标签 java equals hashcode

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

最佳答案

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

  • 获取参数中key的hashCode()
  • 从这个哈希码推导出桶
  • 将存储桶中的每个键与参数中的键进行比较(使用 equals())以找到正确的键

如果两个相等的对象没有相同的散列码,则该算法的前两步将无法运行。正是这两个第一步使 HashMap 变得非常快 (O(1))。

关于java - 为什么 java 设计者强制要求 if obj1.equals(obj2) then obj1.hashCode() MUST Be == obj2.hashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633758/

相关文章:

java - 如何在客户端和服务器端中止对Web服务的调用?

java - Android:查看表格数据

javascript - 如何确定两个 JavaScript 对象相等?

java - HashMap 添加具有等于 true 和相同哈希码的对象

C# 哈希码返回值

java - 将 Jquery 事件附加到 JSF 数据表

java - 如何将字符串ArrayList转换为char数组

java - 为什么我不能在 Java 中使用 "static import" "equals"方法?

java - 在 Java 中对数组实例调用 hashCode()

java - 将字符串哈希值合并到主哈希值中