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

标签 java hashmap hash

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

此时 HashMap 和其他使用散列的类将产生不同的散列码,作为内部使用的真正 key 。 (编辑:事实证明这不是真的。请查看所选答案。)

有没有办法得到那个内部 key ?我想要它的原因是因为 32 位 key 比现实世界的 key (可能)是一个较长的字符串更有效的内存和速度。

我可以为我的字符串创建一个哈希码注册表,但如果 Java 已经可以做到这一点,那又何必呢。

最佳答案

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

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

还有:HashMap 产生“唯一哈希码”:它只是将具有相同哈希码的所有元素存储在同一个桶中(在链表中)并使用 equals( ) 如果它必须检索其中之一。

关于java - 有没有办法从HashMap这样的对象中获取Java的唯一哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8033742/

相关文章:

java - 发生重复键时的 hashmap 自定义覆盖值

arrays - Ruby 中 Hash 和 Array 哪个效率更高

java - 双哈希常数 5?

javascript - Vue路由器,删除某些页面上的哈希值

java - 为什么我不能在 Java 中复制数组的一部分?

java - java中如何实现web服务

java - 给定由 LinkedList 组成的 java hashmap 中的键,如何更新值?

hash - 了解sha-1碰撞的弱点

java - org.eclipse.persistence.exceptions.ValidationException : Cannot add a query whose types conflict with an existing query

java - 工具提示不换行/忽略最大宽度