Java 中 HashTable 的内部工作原理?
Hashtable 类是 Java 集合框架的一部分,它以键值对的形式将元素存储在哈希表中。键是一个对象,可用于获取和接收与其关联的值。Hashtable 和 HashMap 类之间存在一些相似之处,但 Hashtable 是同步的。此外,它的键必须与值关联,它们不能为 null。本文旨在解释 Java 中 Hash table 的内部工作原理。
Java 中 Hashtable 的工作原理
我们可以将 Hashtable 视为一个桶数组,其中每个桶包含一个条目列表。一个条目包含键和值。我们指定一个键以及可以链接到该键的值。然后对键进行哈希以生成哈希码,该哈希码进一步用作在表中存储值的索引。帮助从哈希码获取值位置的函数称为哈希函数。它始终返回一个称为哈希码的正整数。多个对象在经过名为“equals()”的内置方法评估后可能会获得相同的整数。但是,相似的对象始终具有相同的哈希码。
分配索引的公式
indexNumber = hashNumber % totalBuckets
这里,“%”是返回余数的模运算符
让我们举一个例子来说明上述公式的使用 -
问。假设我们得到一个名为 XYZ 的元素的 hashNumber 为 17,并且可用的桶总数为 5。那么,它将存储在哪个索引号上?
解答 - 17 % 5 = 2 因此,它将获得索引号 2。
Hashtable 中的冲突
如前所述,多个对象可能会获得相同的哈希码,这会导致称为冲突的情况。当两个或多个键具有相同的哈希值并映射到同一个桶时,就会发生这种情况,从而导致性能下降。但是,它不会造成任何功能上的混淆。
声明 Hashtable 的语法
Hashtable<TypeOfKey, TypeOfValue> nameOfTable = new Hashtable<>();
方法
第一步是导入“java.util”包,以便我们可以使用 Hashtable 类
定义 Hashtable 类的实例,并使用名为“put()”的内置方法向其中追加一些对象。
现在,使用 for-each 循环,并在其中使用“keySet()”方法访问与键关联的所有值。
示例 1
以下示例说明了如何在 Java 中实现 Hashtable。
import java.util.*; public class Table { public static void main(String[] args) { Hashtable<String, Integer> workers = new Hashtable<>(); // Adding elements in the workers table workers.put("Vaibhav", 4000); workers.put("Ansh", 3000); workers.put("Vivek", 1500); workers.put("Aman", 2000); workers.put("Tapas", 2500); // printing details workers table System.out.println("Elements in the given table: "); for (String unKey : workers.keySet()) { System.out.println("Name: " + unKey + ", Salary: " + workers.get(unKey)); } } }
输出
Elements in the given table: Name: Aman, Salary: 2000 Name: Ansh, Salary: 3000 Name: Tapas, Salary: 2500 Name: Vivek, Salary: 1500 Name: Vaibhav, Salary: 4000
示例 2
在以下示例中,我们将使用内置方法“get()”检索 Hashtable 的值。此方法接受一个键并返回相应的值。
import java.util.*; public class Table { public static void main(String[] args) { Hashtable<String, Integer> workers = new Hashtable<>(); // Adding elements in the workers table workers.put("Vaibhav", 4000); workers.put("Ansh", 3000); workers.put("Vivek", 1500); workers.put("Aman", 2000); workers.put("Tapas", 2500); // printing details workers table one by one System.out.println("Value stored at key Ansh: " + workers.get("Ansh")); System.out.println("Value stored at key Vivek: " + workers.get("Vivek")); System.out.println("Value stored at key Aman: " + workers.get("Aman")); } }
输出
Value stored at key Ansh: 3000 Value stored at key Vivek: 1500 Value stored at key Aman: 2000
结论
我们从定义 Hashtable 类开始本文,在下一节中,我们通过示例解释了它的内部工作原理。之后,我们通过 Java 示例程序讨论了 Hashtable 的实际实现。