Java Hashtable是如何工作的
Hashtable类是Java集合框架的一部分,在哈希表中以键值对的形式存储其元素。键是可以用来获取和接收与之关联的值的对象。Hashtable和HashMap类之间存在一些相似之处,但哈希表是同步的。另外,它的键必须与值关联,不能为null。本文旨在解释Java中哈希表的内部工作原理。
Java中Hashtable的工作原理
我们可以将Hashtable视为一个桶的数组,每个桶包含一个条目列表。一个条目包括键和值。我们指定一个键和与其相关联的值。然后将键进行哈希处理,生成一个哈希代码,该代码被用作在表中存储值的索引。帮助从哈希码获取值的位置的函数称为哈希函数。它总是返回一个被称为哈希码的正整数值。多个对象在通过一个名为“equals()”的内置方法进行评估后,可能会获得相同的整数值。但是,相似的对象始终具有相同的哈希码。
分配索引的公式
索引号 = 哈希号 % 总桶数
这里,“%”是取模运算符,返回余数
让我们以一个示例来说明上述公式的使用:
假设我们得到了17作为名为XYZ的元素的哈希号,总可用桶数为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的实际应用实现。