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 的实际实现。

更新于: 2023年7月20日

2K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告