我已经为.NET中的方法提出了类似的问题。string.GetHashCode()
从那时起,我了解到,如果我们要在不同的机器上使用哈希码,我们不能依赖于内置类型的哈希码的隐式实现。因此,我假设 Java 的实现String.hashCode()
在不同的硬件配置中也是不稳定的,并且可能在不同的虚拟机中表现不同(不要忘记不同的虚拟机实现)
目前我们正在讨论一种在 Java 中通过哈希将字符串安全地转换为数字的方法,但是哈希算法必须在集群的不同节点之间保持稳定,并且评估速度快,因为使用频率很高。我的队友坚持使用原生hashCode
方法,我需要一些合理的论据来让他们重新考虑另一种方法。目前,我只能想到机器配置(x86 和 x64)之间的差异,可能是某些机器上 JVM 的不同供应商(在我们的案例中几乎不适用)和字节顺序差异,具体取决于算法所使用的机器跑。当然,可能还要考虑字符编码。
虽然所有这些事情都出现在我的脑海中,但我不能 100% 确定其中任何一个都是足够有力的理由,我会感谢您在这方面的专业知识和经验。这将帮助我建立更有力的论据来支持编写自定义散列算法。另外,我很感激关于在实施时不应该做什么的建议。