java - 双哈希常数 5?

标签 java hash hashcode double-hashing

<分区>

我发现了很多双重哈希的例子,所有的例子都告诉我当你第二次哈希时你必须使用 %5。

我的问题是为什么是 5?是约定你总是使用 5 还是它是如何工作的?

一个例子:https://www.cs.washington.edu/education/courses/326/00wi/handouts/lecture16/sld025.htm

最佳答案

在一个有N个地方的哈希表中,思路是使用两个独立的哈希函数h1(key)和h2(key),然后使用探测序列

h1 % N, (h1 + h2) % N, (h1 + 2*h2) % N, (h1 + 3*h2) % N, ...

你要保证h2和N的最大公约数是1,否则你达不到表中的所有地方。

有几种方案可以实现,例如:

  • 选择N作为质数,让h2在[1, N-1]区间给出结果
  • 取N为2的幂,令h2为区间[1, N-1]中的奇数

关于java - 双哈希常数 5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973558/

相关文章:

java - Spring:url 没有正确解析链接

javascript - 在 python 和 node.js 中复制 java.lang.String.hashCode() 输出的函数

java - 如果 GetStringUTFChars 返回了一个副本,你应该调用 ReleaseStringUTFChars 吗?

java - quartz 调度程序 : Failed to obtain DB connection from data source

java - 如何通过JavaFX从Mariadb数据库获取数据到表?

php - 如何从 MD5 和 base64_encode 获得相同的结果

database - 根据数据签名对数据进行分类

Java可恢复哈希计算

java - 如何重写hashcode和equals方法以避免在java中的HashSet中添加重复的字符串?

java - 查找对象中某些属性值作为 HashMap 值的出现次数的有效方法