CodeGym /Java Blog /Toto sisi /如何在 Java 中迭代一個 Map
John Squirrels
等級 41
San Francisco

如何在 Java 中迭代一個 Map

在 Toto sisi 群組發布
在這篇文章中,我們將學習在 Java 中迭代 Map 的不同方法。它的一些常用方法以及如何在示例的幫助下使用這些方法。在開始之前,我們假設您了解Java 中的接口映射。但是,這裡有一個快速回顧。

什麼是 Java 中的地圖?

對此有多種解釋,我們就簡單的這麼說吧。
“Map是Java中的一個接口,用於以鍵值對的形式存儲數據。”
如果您正在考慮地圖的用途是什麼?或者什麼時候需要它們?那麼在現實生活中有很多情況我們需要以鍵值對的形式存儲數據。例如,字典中單個字母對應的所有單詞在Java中都可以以映射的形式存儲。
風箏,國王,韓國,騎士,...等
大號 熔岩、生命、光、愛、黎巴嫩……等等。
此外,您可以查看以下示例以更好地理解這一點。
鑰匙 價值
家庭身份證 家庭成員
班級名稱 學生證
區域名稱 郵政編碼
區域塊 房屋號碼

為什麼我們需要遍歷 Map?

我們需要遍歷或迭代地圖以訪問、修改或刪除數據。讓我們探討一下我們擁有的一些選項。

在 Java 中迭代 Map 有哪些常見方法?

雖然有很多方法可以遍歷地圖。但是,我們將專注於最有效和最簡單的方法。
  1. ForEach 循環方法
  2. 迭代器方法
請在下面找到這兩種方法的實現。

使用 Foreach 循環方法

例子


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

public class ForEachDemo {

	public static void main(String[] args) {

		Map<String, String> businessDays = new HashMap<String, String>();

		// store business days i-e; key/value pairs in the Map
		businessDays.put("1", "Monday");
		businessDays.put("2", "Tuesday");
		businessDays.put("3", "Wednesday");
		businessDays.put("4", "Thursday");
		businessDays.put("5", "Friday");

		// Iterating over the Map.entrySet() using map.forEach
		for (Map.Entry<String, String> entry : businessDays.entrySet()) 
		{
			System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue()); 
		}
	}
}

輸出

鍵 = 1,值 = 星期一鍵 = 2,值 = 星期二鍵 = 3,值 = 星期三鍵 = 4,值 = 星期四鍵 = 5,值 = 星期五

解釋

在此示例中,我們使用 foreach 循環遍歷地圖。通過使用 for-each 循環,我們得到一個entrySet(),它以鍵值對的形式提供地圖中數據的自動“視圖”。每個 entrySet 包含一個鍵和相應的值。您可以根據需要在其中使用Map.Entry<key, value>的所有方法。在這裡,我們只使用了getKey()getValue()來在控制台上顯示數據。作為練習,您可以探索其餘的方法來加強您對這個概念的掌握。

使用迭代器方法

例子


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

public class MapIterator {

	public static void main(String[] args) {

		Map<String, String> monthsInAYear = new HashMap<String, String>();

		// store business days i-e; key/value pairs in the Map
		monthsInAYear.put("1", "January");
		monthsInAYear.put("2", "February");
		monthsInAYear.put("3", "March");
		monthsInAYear.put("4", "April");
		monthsInAYear.put("5", "May");
		monthsInAYear.put("6", "June");
		monthsInAYear.put("7", "July");
		monthsInAYear.put("8", "August");
		monthsInAYear.put("9", "September");
		monthsInAYear.put("10", "October");
		monthsInAYear.put("11", "November");
		monthsInAYear.put("12", "December");

		// iterate map / traverse the map using using iterator
		Iterator<Map.Entry<String, String>> iterator = monthsInAYear.entrySet().iterator();

		while (iterator.hasNext()) 
		{
			// check if next entry exists in the map
			Map.Entry<String, String> entry = iterator.next(); 
			System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());

		}
	}
}

輸出

鍵 = 11,值 = 11 月鍵 = 1,值 = 1 月鍵 = 12,值 = 12 月鍵 = 2,值 = 2 月鍵 = 3,值 = 3 月鍵 = 4,值 = 4 月鍵 = 5,值 = 5 月鍵= 6,值 = 6 月鍵 = 7,值 = 7 月鍵 = 8,值 = 8 月鍵 = 9,值 = 9 月鍵 = 10,值 = 10 月

解釋

在此示例中,我們創建顯式迭代器來遍歷/迭代地圖。首先需要導入迭代器類,然後獲取entrySet的迭代器。現在遍歷地圖,同時繼續檢查地圖上存在的下一個實體。給你!你的遍歷就這樣完成了。

Foreach 循環是否比迭代器方法更好?

使用哪種方法遍歷地圖並不重要,只要它能為您完成工作即可。在性能方面,for-each 循環和迭代器具有相同的時間複雜度。所以沒有一個比另一個更好,這取決於您需要使用什麼以及何時使用。

這兩種方法有什麼區別?

for-each 循環不允許更新/修改地圖中的數據。相反,您可以使用迭代器輕鬆修改數據。迭代器類通過提供實現來編輯/刪除地圖中的數據來為您提供便利。相反,如果您嘗試使用 for-each 循環編輯/刪除地圖數據,它將拋出ConcurrentModificationException。這樣做的原因是 for-each 循環隱式創建了一個迭代器,它不會暴露給用戶。因此,您無權修改或刪除任何數據。

什麼時候使用哪種遍歷方法?

如果您不確定是使用 for-each 還是迭代器來迭代您的地圖,那麼您可以採用以下建議。
  • 如果必須修改地圖,請使用迭代器。
  • 如果您有嵌套循環,請使用for-each循環(以避免複雜性)。

結論

到文章結尾時,我們希望您已經學會瞭如何在 Java 中迭代地圖。我們鼓勵您練習這些並嘗試其他遍歷方法。每當您感到困難時,請隨時跳回去或發帖提問。到那時,祝您學習愉快!
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION