Java:对象的哈希函数

j0k*_*ker 5 java hash

我正在考虑使用任意Java对象的哈希函数来进行练习.天真的方法是为每个属性调用hashCode() - 函数,添加这些哈希值,然后将总和模数加上最大哈希值,或类似的东西.但是,这意味着,只要打开属性,哈希值就会改变,因此如果要将对象存储在哈希表中,则不能使用此方法.对象的哈希码应表示其身份.但是,我如何将此抽象标识表示为整数值?也许通过使用对象地址(假设,Java在运行时不会在内存中移动对象),但在Java中是否有办法获取对象地址?

你会如何实现这样的哈希函数?

提前致谢.

Ern*_*ill 3

java.lang.System有一个方法identityHashCode(Object),它返回一个在对象生命周期内不会改变的值。它可能与对象的机器地址相关(以某种神秘的、依赖于实现的方式)。无论如何,这就是该方法存在的原因。