HashMap数据结构基于Key的哈希码在其桶之间分配密钥。大多数情况下,如果散列算法非常好,则所有密钥都将分布在不同的桶中。但是,如果所有键都返回相同的哈希码呢?插入/检索操作的顺序为O(n)。
如果我正在实现我自己的HashMap,我将如何(或我该怎么做)确保桶之间的平等分配?还有办法吗?
答案 0 :(得分:1)
但是如果所有键都返回相同的哈希码呢?
然后你输了比赛,你无能为力。
不过不用担心,因为您的数据结构实际上并不关心 - 您的数据结构的用户可能,但他们是负责病态hashCode
实施的人员。第一个案例。
理论上,即使是恶意选择的输入值也可以用universal hashing合理均匀地分配,但在Java中,这实际上不是一种选择。
答案 1 :(得分:1)
在键上运行DES之类的东西以生成哈希值。一个不错的加密算法可以保证结果看起来是随机的。