Java 中的双重哈希2025年3月17日 | 阅读 8 分钟 在编程中,当我们处理数据结构时,有时需要存储具有相同哈希值的两个对象。存储具有相同哈希值的两个对象是不可能的。为了解决这个问题,数据结构提供了冲突解决技术。在本节中,我们将只关注双重散列、其优点、示例和公式。 数据结构提供了以下冲突解决技术
什么是双重散列?它是一种用于避免冲突的开放寻址哈希表中的冲突解决技术。当两个键被散列到哈希表中的同一个索引时,就会发生冲突。发生冲突的原因是哈希表中的每个槽位都应该存储单个元素。 通常,散列技术包含一个哈希函数,该函数接受一个键并为该键生成哈希表索引。双重散列技术使用两个哈希函数,因此称为双重散列。如果第一个哈希函数产生冲突,第二个哈希函数会提供一个偏移量。换句话说,我们可以说当两个不同的对象具有相同的哈希值时,称为冲突。 哈希函数哈希函数是一个接受一组字符(键)并将其映射到特定长度的值(称为哈希值或散列)的函数。这个过程称为散列。它用于数据库中的索引和定位项。它提供了一种简单的方法来查找与较短哈希值关联的较长值。它广泛用于加密。它也被称为哈希算法或消息摘要函数。 双重哈希函数第一个哈希函数确定查找键的初始位置,第二个哈希函数用于确定探测序列中跳跃的大小。以下函数是双重散列的示例 或 在上述函数中,i 的值会不断递增,直到找到一个空槽。 如果表的大小是素数,双重散列效果很好。 其中 PRIME 是小于 tableSize 的素数。 如果上述函数计算出的偏移量已被其他对象占用,则表示存在冲突。一个好的哈希函数必须具备以下属性
双重散列的优点
双重散列示例假设我们有一个大小为11的哈希表。我们想在哈希表中插入键20, 34, 45, 70, 56。让我们使用以下双重哈希函数将键插入哈希表中 h1(k) = k mod 11 (第一个哈希函数) h2(k) = 8 - (k mod 8) (第二个哈希函数) 首先,我们将创建一个大小为 11 的哈希表。 让我们逐个插入键。
*粗体显示的索引表示冲突。 插入所有键后,哈希表如下所示。 ![]() 现在我们已经清楚地理解了双重散列。因此,我们可以轻松地区分线性探测和二次探测。 在线性探测中,如果在任何索引处发生冲突,我们会查找紧邻的下一个索引。如果下一个索引也被占用,我们会查找紧邻的下一个索引。这个过程会重复,直到找到一个空索引。 在二次探测中,如果在任何索引处发生冲突,我们会查找紧邻的下一个索引。如果下一个索引也被占用,那么我们将跳转到 i2 索引。 假设索引 2 已被占用,那么我们将查找 22,即 4。这意味着从当前索引(即 2)向前查找 4 个索引。 同样,如果索引 3 也被占用,那么我们将查找 32,即 9。这意味着从当前索引(即 3)向前查找 9 个索引。 双重散列插入元素的算法
让我们在 Java 程序中实现上述算法。 双重散列 Java 程序在以下 Java 程序中,我们在哈希表中实现了双重散列。 DoubleHashingExample.java 输出 ![]() 下一主题Java 中的魔方 |
Java 中的异常处理是处理运行时错误的一种有效方法,以确保应用程序的正常流程得以保留。Java 异常处理是一种处理运行时错误(如 ClassNotFoundException、IOException、SQLException、RemoteException 等)的机制。在 Java 中,异常是一种……
5 分钟阅读
Java 中 arr.length、arr[0].length 和 arr[1].length 之间的区别 Java 提供了 length 属性来确定数组的长度。每个数组都有一个内置的 length 属性,其值为数组的大小。大小是指数组可以包含的元素总数....
阅读 2 分钟
java.lang.ref.Reference 类是 Java 中引用对象的抽象基类。它包含检索有关这些引用对象的信息的方法。但是,它不是直接子类,因为与引用对象的交互密切涉及垃圾收集器。声明:public abstract class Reference<T> extends Object ...
阅读 4 分钟
Java &0XFF 示例 为了理解 &0XFF(或 &0xff),我们必须先了解按位 AND 运算符 (&),以及从十六进制到二进制的转换(反之亦然),以及从十进制到二进制的转换(反之亦然)。在继续本节之前,我们还应该了解移位运算符。按位右移运算符...
阅读 3 分钟
变量是编程领域中数据存储和操作的基本组成部分。除了使值在程序中可用外,它们还提供了一种临时保存值的方法。但是,并非所有变量都是均等创建的。每个变量都有一个作用域,用于指定...
阅读 3 分钟
在 Java 中,旅行商问题(TSP)是一个需要找到一条最短路线,该路线恰好经过每个城市一次并返回到起点的问题。哈密顿回路(Hamiltonian Cycle)是 Java 中的另一个问题,与 TSP 非常相似。它们之间的主要区别在于 TSP...
阅读 4 分钟
java.nio.DoubleBuffer有一个put(double f)方法。DoubleBuffer类用于在当前位置将给定的double写入动态形成的double缓冲区后增加位置。语法:public abstract DoubleBuffer put(double f)参数:需要写入的双精度值f...
阅读 8 分钟
问题陈述给定一个二进制字符串,我们需要找到给定二进制字符串中 0 和 1 的最大差值。在这里,我们将 0 视为 +1,将 1 视为 -1,然后寻找连续子数组的最大值。这个子数组的最大和……
阅读 4 分钟
问题陈述 反转数字 N 的第 k 个最高有效位 (MSB) 涉及翻转位置为 k 的位,从最左边的位开始计数。问题解决方案 该过程如下:创建掩码:一个在第 k 个位置为 1 的掩码。使用 XOR:应用 XOR 来翻转...
阅读 4 分钟
在本节中,我们将解决一个问题,我们需要计算二维矩阵中的“X”形状。矩阵中的字母可以是“X”或“O”,其中“X”代表形状的一部分,“O”代表空格。目标是...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India