有没有办法从像HashMap这样的对象中获取Java的唯一哈希码?

H2O*_*aCl 3 java hash hashmap

我相信如果我声明一个HashMap并重复提供它的Map.Entry实例,最终一个哈希码将与另一个哈希码冲突,即使这两个键(恰好是我需要的字符串)是不同的.

此时,HashMap和其他使用散列的类将生成不同的哈希代码,作为内部使用的真正密钥.(编辑:事实证明这不是真的.请看选定的答案.)

有没有办法获得内部密钥?我想要它的原因是因为32位密钥比真实世界密钥更有效的内存和速度,这将是(可能)长字符串.

我可以为我的字符串创建一个哈希代码注册表,但是如果Java已经可以做到这一点,为什么还要烦恼.

Joa*_*uer 8

.您无法为系统中的每个可能对象获取唯一的32位数.

最简单的证明是,在具有足够内存量的64位JVM上,您可以轻松拥有超过2 ^ 32个对象:因此您需要超过2 ^ 32个不同的哈希值.但由于您只有32位来存储这些哈希值,因此您不能获得超过2 ^ 32个不同的哈希值.这被称为Pidgeonhole原理.

另外:产生"唯一哈希码":它只是将具有相同哈希码的所有元素存储在同一个桶中(在链表中),并使用它是否必须检索其中一个来检查它们中的每一个.HashMap equals()