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+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.