【问题标题】:Why does the Hashcode of an Object change in Java?为什么Java中Object的Hashcode会发生变化?
【发布时间】:2011-08-15 15:50:46
【问题描述】:

为什么Java中Object的Hashcode会发生变化?它有变化吗? 它与 Hashtable 有什么关系? 每个对象都应该有它唯一的哈希码。那么,Rehashing 是一个原因吗?

提前致谢。

【问题讨论】:

标签: java hash


【解决方案1】:

哈希码的默认实现等价于对象标识。但是,某些对象会覆盖哈希码,这可能会为您提供根据对象状态更改的哈希码。

通常,如果您要覆盖 equals 的定义(事实上,如果您覆盖 equals,您应该覆盖 hashcode)。这是因为您希望根据您创建的任何定义都相等的对象返回相同的哈希码。否则,您可能会遇到地图包含多个“相等”对象的情况,因为它们返回不同的哈希码。

【讨论】:

  • 或者更糟糕的是,对象的哈希码在它位于地图中时会发生变化,而您会丢失外部引用。恢复它的唯一方法是遍历地图并根据您的条件执行等于。
  • 这是一个非常非常不愉快的想法——我从不担心这种特殊的可能性,但现在我会的。好名字,顺便说一句。
猜你喜欢
  • 2016-06-12
  • 2015-01-15
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多