如何在 Java 中迭代 HashMap?


Java HashMap 集合使用 (鍵,值) 對來儲存資料。儘管它是非同步的,但它與 HashTable 相比。因此,多個執行緒可以訪問 HashMap 而不遇到任何問題。儘管 HashMap 允許儲存空鍵,但最多隻能有一個空鍵物件和無限多個空值。關於對映的順序,此類不提供任何保證。

鍵用於索引值。我們可以使用 HashMap 儲存唯一的鍵。如果我們嘗試插入一個重複的鍵,則相應鍵的元素將被替換。

不要忘記我們應該匯入 java.util.HashMap 包才能使用 HashMap。

使用的方法

您可以使用四種主要方法來迭代 HashMap:

  • 在迭代器的幫助下迭代 HashMap EntrySet。

  • 在 for-each 迴圈和 lambda 的幫助下迭代 HashMap

  • 使用迭代器迭代 HashMap KeySet。

  • 使用 Stream API 遍歷 HashMap。

方法 1:在迭代器的幫助下迭代 HashMap EntrySet

在這裡,我們將使用 getValue() 和 getKey() 函式來迭代 HashMap。這是一個示例實現。

entryset()

我們在這裡探討的程式碼首先建立一個 HashMap,然後向其中提供一些鍵值對。隨後,我們使用 for 迴圈中的 entrySet() 方法遍歷 HashMap

演算法

  • 步驟 1 - 匯入所需的 Java 實用程式類。

  • 步驟 2 - 宣告一個名為 Tutorialspoint 的公共類。

  • 步驟 3 - 使用 String[] args 引數定義 main 方法。

  • 步驟 4 - 建立一個名為 foodTable 的 HashMap 類的新例項,其鍵和值型別為 String。

  • 步驟 5 - 使用 put 方法向 foodTable 新增元素。

  • 步驟 6 - 啟動一個迴圈,使用 entrySet 方法迭代 foodTable 中的條目。

  • 步驟 7 - 在每次迭代中,使用 set 變數檢索當前條目。

  • 步驟 8 - 使用 System.out.println 列印當前條目的鍵值對。

  • 步驟 9 - 結束迴圈、main 方法和 Tutorialspoint 類。

示例

import java.util.HashMap;
import java.util.Map;

public class Tutorialspoint{

   public static void main(String[] args){
      Map<String, String> foodTable
      = new HashMap<String, String>();

      // Incorporating elements to the adobe HashMap
      foodTable.put("C", "C Language");
      foodTable.put("R", "Ruby");
      foodTable.put("J", "Java");
      foodTable.put("P", "PHP");

      // Iterating HashMap through for loop
      for (Map.Entry<String, String> set :
      foodTable.entrySet()) {
         System.out.println(set.getKey() + " -> " + set.getValue());
      }
   }
}

輸出

P -> PHP
R -> Ruby
C -> C Language
J -> Java

方法 2:在 for-each 迴圈和 Lambda 的幫助下迭代 HashMap

我們在此方法中使用 lambda 表示式,這些表示式自 Java 8 版以來即可使用。lambda 表示式對其輸入引數的操作會產生一個值。無需將每個鍵值對轉換為條目集即可使用 lambda 表示式解決此問題。

forEach()

此程式匯入所需的 Java 實用程式類,構建一個名為“map”的 HashMap 物件,用鍵值對新增它,然後使用 forEach() 函式迭代它。它在每次迭代中顯示公司名稱和相應的淨資產。

演算法

  • 步驟 1 - 透過匯入所需的 Java 實用程式類(Map 和 HashMap)來開始程式執行。

  • 步驟 2 - 建立一個名為“IterationInstance”的類。

  • 步驟 3 - 在“IterationInstance”類中,定義“main”方法。

  • 步驟 4 - 建立一個名為“map”的新 HashMap 物件,以儲存組織名稱及其各自的淨資產值。

  • 步驟 5 - 現在,您可以使用“put”方法將條目合併到對映中。

  • 步驟 6 - 使用“forEach”方法迭代對映中的條目。

  • 步驟 7 - 在 lambda 表示式中,定義要對每個條目執行的行為:列印組織名稱及其淨資產。

  • 步驟 8 - 執行 lambda 表示式,列印對映中每個條目的公司名稱和淨資產。

  • 步驟 9 - 結束程式執行。

示例

import java.util.Map;   
import java.util.HashMap;   
public class IterationInstance {   
   public static void main(String[] arg) {   
      Map<String,String> map = new HashMap<String,String>();   
      map.put("Amazon", "$468 billion");   
      map.put("Apple", "$2.5 trillion"); 
      
      //iteration over map with the help of forEach() method  
      map.forEach((k,v) -> System.out.println("Company Name: "+ k + ", Net Value is: " + v));   
   }   
}

輸出

Company Name: Apple, Net Value is: $2.5 trillion
Company Name: Amazon, Net Value is: $468 billion

方法 3:使用迭代器迭代 HashMap KeySet

這次,可以使用迭代器。由於 HashMap.entrySet() 提供了一個擴充套件 Collection 介面的集合,因此我們也可以使用使用 Map.entrySet().iterator 生成的 Iterator 例項。

While()

該程式碼建立一個 HashMap 物件並向其中提供鍵值對。然後,它遍歷 HashMap 並列印每個對的鍵和值。

演算法

  • 步驟 1 - 從 Java 實用程式庫匯入必要的類。

  • 步驟 2 - 然後,程式碼建立一個名為 intType 的 HashMap 物件,以儲存整數鍵和字串值。

  • 步驟 3 - 程式碼使用 put() 方法向 HashMap 新增鍵值對。

  • 步驟 4 - 然後,它透過在 HashMap 上呼叫 entrySet().iterator() 方法建立一個迭代器。

  • 步驟 5 - 程式碼使用 while 迴圈和迭代器的 hasNext() 方法遍歷 HashMap。

  • 步驟 6 - 它使用迭代器的 next() 方法接收下一個 HashMap 條目。

  • 步驟 7 - 此程式碼然後使用 Map.Entry 物件的 getKey() 和 getValue() 方法檢索每個條目的鍵和值。

  • 步驟 8 - 此程式碼然後使用 System.out.println() 方法列印鍵和值。

  • 步驟 9 - 現在,重複步驟 5-8,直到 HashMap 中沒有其他條目。

示例

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

public class TLP {

   // Main driver method
   public static void main(String[] arguments){

      // Generating Hash map
      Map<Integer, String> intType
      = new HashMap<Integer, String>();

      // Incorporate data(Key-value pairs) into hashmap
      intType.put(11, "Eleven");
      intType.put(12, "Twelve");
      intType.put(13, "Thirteen");
      intType.put(14, "Fourteen");

      // Iterator
      Iterator<Entry<Integer, String> > new_Iterator
      = intType.entrySet().iterator();

      while (new_Iterator.hasNext()) {
         Map.Entry<Integer, String> new_Map
            = (Map.Entry<Integer, String>)
         new_Iterator.next();

         System.out.println(new_Map.getKey() + " = " + new_Map.getValue());
      }
   }
}

輸出

11 = Eleven
12 = Twelve
13 = Thirteen
14 = Fourteen

方法 4:利用 Stream API 迭代 HashMap

流 API 是處理專案集合的有效工具。它允許我們在不更改原始資料結構的情況下對資料執行操作。

entrySet().stream()

該程式碼建立一個 HashMap 以儲存整數鍵和相應的字串值。然後,它向對映中新增四個鍵值對,並使用流和 forEach 列印對映中的每個鍵值對。輸出顯示鍵及其相應的值。

演算法

  • 步驟 1 - 建立一個名為 intType 的 HashMap 以儲存整數鍵和相應的字串值。

  • 步驟 2 - 將鍵值對新增到 intType HashMap

  • 步驟 3 - 使用 entrySet() 函式迭代 intType HashMap 中的每個條目,即鍵值對。

  • 步驟 4 - 對於每個條目,顯示鍵及其相應的值。

  • 步驟 5 - 最後,終止程式碼。

示例

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

public class TLP {

   public static void main(String[] arguments){
      Map<Integer, String> intType
         = new HashMap<Integer, String>();

      intType.put(1, "Apple");
      intType.put(2, "Cherry");
      intType.put(3, "Banana");
      intType.put(4, "Berries");
      intType.entrySet().stream().forEach(
         input
         -> System.out.println(input.getKey() + " = " + input.getValue())
      );
   }
}

輸出

1 = Apple
2 = Cherry
3 = Banana
4 = Berries

結論

在 Java 中遍歷 HashMap 是操作鍵值對時的一項常見任務。Java HashMap 提供了幾種迭代技術,例如迭代器、帶有 lambda 的 for-each 迴圈、帶有迭代器的鍵集和流 API。

更新於: 2023-10-18

307 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告