如何在 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。