在這篇文章中,我們將學習在 Java 中迭代 Map 的不同方法。它的一些常用方法以及如何在示例的幫助下使用這些方法。在開始之前,我們假設您了解Java 中的
接口和
映射。但是,這裡有一個快速回顧。
什麼是 Java 中的地圖?
對此有多種解釋,我們就簡單的這麼說吧。
“Map是Java中的一個接口,用於以鍵值對的形式存儲數據。”
如果您正在考慮地圖的用途是什麼?或者什麼時候需要它們?那麼在現實生活中有很多情況我們需要以鍵值對的形式存儲數據。例如,字典中單個字母對應的所有單詞在Java中都可以以映射的形式存儲。
鉀 |
風箏,國王,韓國,騎士,...等 |
大號 |
熔岩、生命、光、愛、黎巴嫩……等等。 |
此外,您可以查看以下示例以更好地理解這一點。
鑰匙 |
價值 |
家庭身份證 |
家庭成員 |
班級名稱 |
學生證 |
區域名稱 |
郵政編碼 |
區域塊 |
房屋號碼 |
為什麼我們需要遍歷 Map?
我們需要遍歷或迭代地圖以訪問、修改或刪除數據。讓我們探討一下我們擁有的一些選項。
在 Java 中迭代 Map 有哪些常見方法?
雖然有很多方法可以遍歷地圖。但是,我們將專注於最有效和最簡單的方法。
- ForEach 循環方法
- 迭代器方法
請在下面找到這兩種方法的實現。
使用 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 中迭代地圖。我們鼓勵您練習這些並嘗試其他遍歷方法。每當您感到困難時,請隨時跳回去或發帖提問。到那時,祝您學習愉快!
GO TO FULL VERSION