hashCode()值在执行之间发生变化

Roa*_*oam 4 java serialization hashcode

在一次执行应用程序时,对象的hashCode必须与该对象保持一致 - 对于任何对象o,o.hashCode()应该返回相同的int值.

但是,这不一定是从一个运行时到另一个运行时:o.hashCode() 可以返回一些其他值,这完全没有规范.

HashMap根据hashCode值计算正确的bucked .

我的问题是:这个值在一个会话到另一个会话之间如何处理?序列化是否具有处理此功能的功能?

所以,假设我构建了一个哈希并将其存储在磁盘上.2周后,我调用了应用程序并运行它.我在哈希中查找一个对象.通过这些,这个对象的hashCode现在可以和以前不同,虽然它在哈希中,但我无法找到它.

对序列化不太了解 - 但是.对不起,如果太天真.

Rob*_*een 7

这是有效的,因为哈希表没有被序列化为哈希表.它们以自定义方式序列化.因此,在反序列化时,将使用新的哈希码重建哈希表.

  • @Roam你为什么要这样?您已经意识到不这样做的一个原因 - 运行之间哈希码的可变性.此外,哈希表被组织用于快速搜索,而不是空间效率. (3认同)