如何在Java中迭代HashTable?


HashTable 是一個基本的資料結構,它基於鍵的雜湊碼進行操作,並且不保留插入順序。它不允許重複的鍵,但允許重複的值。

值得注意的是,它可以容納鍵和值各種各樣的物件,從而促進異構性。但是,不允許鍵和值為 null,因為這樣做會導致一個名為 NullPointerException 的執行時異常。

在介面方面,HashTable實現了可序列化和可克隆介面,但它沒有實現 RandomAccess 介面。

此外,HashTable 中的所有方法都是同步的,確保了 HashTable 物件的執行緒安全。

當需要選擇一個數據結構來執行頻繁的搜尋操作時,HashTable 是最佳選擇。

使用的方法

我們可以透過多種方法迭代雜湊表,包括:

  • 透過 Enumeration 介面

  • 藉助 keySet() 方法和增強型 for 迴圈

  • 藉助 Map 的 keySet() 方法和 Iterator 介面

  • 利用 Map 的 entrySet() 方法和增強型 for 迴圈

  • 藉助 Map 的 entrySet() 方法和 Iterator 介面

  • 利用 Java 8 中的 Iterable.forEach() 方法

方法 1:透過 Enumeration 介面

java.util.Enumeration 介面是一個預定義的介面,用於從集合框架中的變數中檢索資料。它只允許向前檢索資料,不支援向後遍歷。需要注意的是,Enumeration 介面已被迭代器取代。

nextElement()

程式碼建立了一個 Hashtable。程式碼隨後用鍵值對填充它。然後,它透過鍵迭代,以鍵的降序列印其對應的值。

演算法

  • 步驟 1 - 匯入所需的 Java 類:"java.util" 和 "java.util.Enumeration"。

  • 步驟 2 - 宣告一個名為 "TLP" 的類。

  • 步驟 3 - 在 "TLP" 類中定義 main 方法:public static void main(String[] args)。

  • 步驟 4 - 建立一個名為 "ht" 的 Hashtable 類的新例項,用於儲存整型鍵和字串值。

  • 步驟 5 - 使用 put 方法將鍵值對新增到 Hashtable "ht" 中

  • 步驟 6 - 透過在 Hashtable "ht" 上呼叫 keys() 方法建立一個名為 "e" 的新 Enumeration 物件。

  • 步驟 7 - 使用條件 "e.hasMoreElements()" 進入 while 迴圈,以迭代 Hashtable 中的鍵。

  • 步驟 8 - 在 while 迴圈中,使用 nextElement() 方法從 Enumeration 中檢索下一個鍵,並將其分配給變數 "key"。

  • 步驟 9 - 將輸出訊息列印到控制檯。您可以使用 System.out.println() 方法執行此操作。

  • 步驟 10 - 終止程式

示例

import java.util.*;
import java.util.Enumeration;

// Main Class
public class TLP {

   public static void main(String[] args){

      Hashtable<Integer, String> ht = new Hashtable<>();
      ht.put(1, "Apple");
      ht.put(2, "Strawberry");
      ht.put(3, "Berry");
      ht.put(4, "Guava");
      ht.put(5, "Peach");

      Enumeration<Integer> e = ht.keys();

      while (e.hasMoreElements()) {
         int key = e.nextElement();
         System.out.println("Rank : " + key + "\t\t Name : " + ht.get(key));
      }
   }
}

輸出

Rank : 5		 Name : Peach
Rank : 4		 Name : Guava
Rank : 3		 Name : Berry
Rank : 2		 Name : Strawberry
Rank : 1		 Name : Apple

方法 2:藉助 keySet() 方法和增強型 for 迴圈

keySet()

程式碼列印儲存在 Hashtable 中的國家及其對應的首都,每個鍵值對都以 "國家:[國家] 首都:[首都]" 的格式顯示。國家和首都按新增到 Hashtable 的順序列印。

演算法

  • 步驟 1 - 建立一個名為 "ht" 的新的 Hashtable 物件,用於儲存字串鍵和字串值。

  • 步驟 2 - 使用 put 方法將鍵值對新增到 Hashtable "ht" 中

  • 步驟 3 - 使用 keySet() 方法從 Hashtable 獲取鍵集,並將其儲存在 Set 變數 "setOfCountries" 中。

  • 步驟 4 - 使用 for-each 迴圈迭代 Set 中的每個鍵。

  • 步驟 5 - 在迴圈內部,將當前鍵分配給 String 變數 "key"。

  • 步驟 6 - 列印輸出訊息。我們使用 System.out.println() 方法執行此操作

  • 步驟 7 - 結束程式

示例

import java.util.Hashtable;
import java.util.Set;

public class TLP {

   public static void main(String[] args) {

      Hashtable<String, String> ht = new Hashtable<String, String>(); 

      ht.put("India", "Delhi");
      ht.put("Russia", "Moscow");
      ht.put("Australia", "Canberra");
      ht.put("USA", "Washingtin DC");

      // getting keySet() into Set
      Set<String> setOfCountries = ht.keySet();

      // for-each loop
      for(String key : setOfCountries) {
         System.out.println("Country : "  + key + "\t\t Capital : "  + ht.get(key));
      }
   }
}

輸出

Country : USA		 Capital : Washingtin DC
Country : Russia		 Capital : Moscow
Country : India		 Capital : Delhi
Country : Australia		 Capital : Canberra

方法 3:使用 Map 的 keySet() 方法和 Iterator 介面

hasNext()

程式碼首先建立一個州及其名稱的雜湊表。然後,它迭代雜湊表並列印每個州及其名稱。

演算法

  • 步驟 1 - 建立一個名為 ht 的雜湊表,並用五個鍵值對初始化它。

  • 步驟 2 - 獲取雜湊表的 keySet() 並將其儲存在一個名為 setOfKeys 的集合中。

  • 步驟 3 - 為 setOfKeys 建立一個名為 itr 的迭代器。

  • 步驟 4 - 使用 itr 迭代器遍歷 setOfKeys

  • 步驟 5 - 獲取集合中的下一個元素,它是一個整型鍵。

  • 步驟 6 - 從雜湊表獲取與鍵關聯的名稱。

  • 步驟 7 - 列印州和名稱。

示例

import java.util.*;
import java.util.Iterator;
import java.util.Set;

public class TLP {

   // Main driver method
   public static void main(String[] args){
      Hashtable<Integer, String> ht = new Hashtable<>();

      ht.put(1, "Telangana");
      ht.put(2, "Karnataka");
      ht.put(3, "Delhi");
      ht.put(4, "Maharashtra");
      ht.put(5, "Rajasthan");

      Set<Integer> setOfKeys = ht.keySet();

      Iterator<Integer> itr = setOfKeys.iterator();

      while (itr.hasNext()) {
         int key = itr.next();
         System.out.println("State : " + key + "\t\t Name : " + ht.get(key));
      }
   }
}

輸出

State : 5		 Name : Rajasthan
State : 4		 Name : Maharashtra
State : 3		 Name : Delhi
State : 2		 Name : Karnataka
State : 1		 Name : Telangana

方法 4:使用 Map 的 entrySet() 方法和增強型 for 迴圈

while()

給定的程式碼建立一個 Hashtable 並用鍵值對填充它,這些鍵值對錶示水果及其對應的顏色。然後,它迭代 Hashtable 中的條目並列印每個水果及其對應的顏色。輸出按新增到 Hashtable 的順序顯示水果和顏色。

演算法

  • 步驟 1 - 建立一個名為 ht 的雜湊表,並用三個鍵值對初始化它。

  • 步驟 2 - 獲取雜湊表的 entrySet()。

  • 步驟 3 - 建立一個 for-each 迴圈,迭代 entrySet()。

  • 步驟 4 - 在迴圈的每次迭代中,獲取 entrySet() 中的下一個元素,它是一個 Map.Entry 物件。

  • 步驟 5 - 從 Map.Entry 物件中獲取水果和顏色。

  • 步驟 6 - 列印水果和顏色。

示例

package in.bench.resources.hashtable.iteration.ways;

import java.util.Hashtable;
import java.util.Map.Entry;
import java.util.Set;

public class TLP {
   public static void main(String[] args) {
      Hashtable<String, String> ht = new Hashtable<String, String>(); 

      ht.put("Apple", "Red");
      ht.put("Guava", "Green");
      ht.put("Lychee", "White");

      Set<Entry<String, String>> entrySet = ht.entrySet();

      for(Entry<String, String> entry1 : entrySet) {
         System.out.println("Fruit : "  + entry1.getKey() + "\t\t Color : "  + entry1.getValue());
      }
   }
}

輸出

Fruit : Guava		 Color : Green
Fruit : Lychee		 Color : White
Fruit : Apple		 Color : Red

方法 5:藉助 Map 的 entrySet() 方法和 Iterator 介面

hasNext()

給定的程式碼建立一個 Hashtable 並新增鍵值對,表示等級及其對應的名稱。然後,它使用迭代器迭代 Hashtable 中的條目,並列印每個等級及其對應的名稱。輸出按鍵的升序顯示等級和名稱。

演算法

  • 步驟 1 - 建立一個名為 ht 的雜湊表,並用五個鍵值對初始化它。

  • 步驟 2 - 獲取雜湊表的 entrySet()。

  • 步驟 3 - 為 entrySet() 建立一個名為 itr 的迭代器。

  • 步驟 4 - 使用 itr 迭代器遍歷 entrySet

  • 步驟 5 - 獲取集合中的下一個元素,它是一個 Map.Entry 物件。

  • 步驟 6 - 從 Map.Entry 物件中獲取等級和名稱。

  • 步驟 7 - 列印等級和名稱。

示例

import java.util.*;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class TLP {
   public static void main(String[] args){

      Hashtable<Integer, String> ht = new Hashtable<>();

      ht.put(1, "Project Management");
      ht.put(2, "Product Management");
      ht.put(3, "Software Development");
      ht.put(4, "Quality Assurance");
      ht.put(5, "Product Strategy");

      Set<Entry<Integer, String> > entrySet
      = ht.entrySet();

      Iterator<Entry<Integer, String> > itr
      = entrySet.iterator();

      while (itr.hasNext()) {
         Entry<Integer, String> entry = itr.next();
         System.out.println("Rank : " + entry.getKey() + "\t\t Name : " + entry.getValue());
      }
   }
}

輸出

Rank : 5		 Name : Product Strategy
Rank : 4		 Name : Quality Assurance
Rank : 3		 Name : Software Development
Rank : 2		 Name : Product Management
Rank : 1		 Name : Project Management

方法 6:利用 Java 8 中的 Iterable.forEach() 方法

forEach()

給定的程式碼建立一個 Hashtable 並新增鍵值對,表示聯盟領土及其對應的名稱。然後,它使用 forEach 方法迭代 Hashtable 中的條目,並列印每個聯盟領土及其對應的名稱。輸出按新增到 Hashtable 的順序顯示聯盟領土和名稱。

演算法

  • 步驟 1 - 建立一個名為 ht 的雜湊表,並用三個鍵值對初始化它。

  • 步驟 2 - 使用 forEach() 方法遍歷雜湊表。

  • 步驟 4 - 從雜湊表獲取鍵和值。

  • 步驟 5 - 列印聯盟領土和名稱。

示例

import java.util.Hashtable;

public class TLP {

   public static void main(String[] args) {
      Hashtable<String, String> ht = new Hashtable<String, String>(); 

      ht.put("1", "Lakshadweep");
      ht.put("2", "Delhi");
      ht.put("3", "Pondicherry");

      ht.forEach((key, value)->System.out.println("Union Territory : " + key + "\t\t" + "Name : " + value));
   }
}

輸出

Union Territory : 1		Name : Lakshadweep
Union Territory : 2		Name : Delhi
Union Territory : 3		Name : Pondicherry

結論

在 Java 中有多種方法可用於迭代 Hashtable。從使用 Enumeration 介面、keySet() 方法與增強型 for 迴圈、keySet() 方法與 Iterator 介面、到 entrySet() 方法與增強型 for 迴圈、entrySet() 方法與 Iterator 介面以及 Iterable,我們都已討論過。

Java 8 中引入了 forEach() 方法。每種方法都提供了根據特定需求遍歷 Hashtable 的靈活性和便利性。

更新於: 2023年10月19日

2K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告