【发布时间】:2013-02-10 03:35:38
【问题描述】:
HashMap 数据结构根据键的哈希码在其桶中分配键。大多数情况下,如果散列算法非常好,所有密钥都将分布在不同的桶中。但是,如果所有键都返回相同的哈希码怎么办?插入/检索操作的顺序为 O(n)。
如果我正在实现自己的 HashMap,我将如何(或者我应该怎么做)确保桶之间的平等分配?有没有办法?
【问题讨论】:
标签: java data-structures hash hashmap
HashMap 数据结构根据键的哈希码在其桶中分配键。大多数情况下,如果散列算法非常好,所有密钥都将分布在不同的桶中。但是,如果所有键都返回相同的哈希码怎么办?插入/检索操作的顺序为 O(n)。
如果我正在实现自己的 HashMap,我将如何(或者我应该怎么做)确保桶之间的平等分配?有没有办法?
【问题讨论】:
标签: java data-structures hash hashmap
但是如果所有的键都返回相同的哈希码呢?
那你输了比赛,你也无能为力了。
不过不用担心,因为您的数据结构实际上并不关心 - 您的数据结构的 用户 可能,但在第一种情况下,他们是负责实现病态 hashCode 的人.
理论上,即使是恶意选择的输入值也可以通过universal hashing 合理平均分配,但在 Java 中,这确实不是一种选择。
【讨论】:
在密钥上运行 DES 之类的东西来生成哈希值。一个体面的加密算法可以保证结果看起来是随机的。
【讨论】:
HashMap 的使用者,而不是数据结构的作者,可以选择 hashCode() 实现。