为什么Java中对象的哈希码会改变?

3

为什么Java中的对象Hashcode会改变?它真的会改变吗?它与Hashtable有什么关系?每个对象都应该有它自己独特的hashcode,所以rehashing是造成它改变的原因之一吗?

提前感谢您。


你有它如何改变的示例吗? - Marcelo
也许你应该阅读这篇文章:https://dev59.com/SFfUa4cB1Zd3GeqPHFcS,还有这篇文章:https://dev59.com/6kvSa4cB1Zd3GeqPbhY7 - panzerschreck
1个回答

4

hashcode的默认实现等同于对象身份。然而,一些对象会重写hashcode,这可能根据对象状态给你不同的hashcode。

通常情况下,你只有在重写equals定义时才会这样做(实际上,如果你重写了equals你应该也要重写hashcode)。这是因为你希望所有按照你定义相等的对象返回相同的hashcode。否则,你可能会遇到这样的情况:一个map包含多个“相等”的对象,因为它们返回不同的hashcode。


3
更糟糕的是,如果对象在映射中时其哈希码发生更改,则会丢失外部引用。唯一的方法是遍历映射并根据您的条件执行相等操作来获取它。 - corsiKa
1
那是一个非常不愉快的想法 - 我从来没有担心过那个特定的可能性,但现在我会了。顺便说一下,这是一个很棒的名字。 - Steve B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接