在java的第一个和第二个哈希函数上使用冲突的双哈希

在java的第一个和第二个哈希函数上使用冲突的双哈希,java,hash,double-hashing,Java,Hash,Double Hashing,对于双重散列,如果与第一个散列函数发生冲突,您将使用第二个散列函数,但是如果仍然存在冲突呢?例如,假设一个哈希表的大小为15,哈希函数为key+3%15,第二个哈希函数为key%8/3+2。假设insert 59通过第一个哈希函数到达索引2,但那里已经有一个键。第二个散列函数将使其变为3,但假设已经有一个值。59将插入哈希表的何处,为什么?谢谢 我特别希望使用双哈希,而不是链式哈希或线性探测。这是特定于实现的,但通常会使用链表或其他灵活的数据结构来管理冲突数据 从java.util.HashMa

对于双重散列,如果与第一个散列函数发生冲突,您将使用第二个散列函数,但是如果仍然存在冲突呢?例如,假设一个哈希表的大小为15,哈希函数为key+3%15,第二个哈希函数为key%8/3+2。假设insert 59通过第一个哈希函数到达索引2,但那里已经有一个键。第二个散列函数将使其变为3,但假设已经有一个值。59将插入哈希表的何处,为什么?谢谢


我特别希望使用双哈希,而不是链式哈希或线性探测。

这是特定于实现的,但通常会使用链表或其他灵活的数据结构来管理冲突数据

从java.util.HashMap javadoc:

它使用散列桶方法;也就是说,处理哈希冲突 通过将新节点链接到预先存在的节点或 节点。以这种方式,线性探测等技术 可能导致不太适合的主群集和重新灰化 使用Java的方法,可以避免预计算哈希代码。 在理想情况下没有冲突,HashMap提供O1 大多数操作的性能值为, 当然可以,我会的。在最坏的情况下,所有关键点都映射到同一个关键点 哈希代码-不太可能,大多数操作都是打开的


这不是我们计算第二个散列函数的方式,因为对于插槽的每一个概率,您都需要一个新的散列函数,这是不可行的

泛型第二个哈希函数的类型为

H1x-第一个散列函数, H2x-第二个散列函数

我们第一次尝试以下插槽-H1x时

下一个探测器是-H1x+H2x


下一个探头H1x+2*H2x。。。。。。。。H1x+n*H2x

这是特定于Java的吗?问题是关于双哈希,这是一种替代链表的策略。OP说他不想要链接。