美文网首页
夯实JAVA基础之 -- equals和hashCode

夯实JAVA基础之 -- equals和hashCode

作者: xue57233 | 来源:发表于2017-04-06 18:07 被阅读7次

hashCode 契约:

  • 在一个运行的进程中,相等的对象必须要有相同的哈希码
  • 请注意这并不意味着以下常见的误解:
  • 不相等的对象一定有着不同的哈希码——错!
  • 有同一个哈希值的对象一定相等——错!

注意点:

  • 哈希码的数量: 2^32 40多亿
  • 手动实现equals方法的时候,一定要同时实现 hashCode 方法

为什么?
因为一个对象的 hashCode 方法需要与 equals 方法考虑同样的域。 通过重写 equals 方法,将申明一些对象与其他对象相等,但是 Object 中的 hashCode 方法将所有的对象看做是不同的。所以你将会有不同哈希码的相同对象。例如,在 HashMap 中调用contains 方法会返回 false,即使这个对象已经被添加。

  • 永远不要把哈希码用作一个 key

生日悖论 现象能解释这个事情。哈希碰撞会有很大的几率发生。

  • 在分布式应用中不要使用哈希码

例如:不应该使用哈希码来持久化状态,因为下次运行时候,"相同"对象的哈希码可能不同。

参考资料:

关于 hashCode() 你需要了解的 3 件事

相关文章

网友评论

      本文标题:夯实JAVA基础之 -- equals和hashCode

      本文链接:https://www.haomeiwen.com/subject/iuyhbttx.html