Java中Map的5種遍歷方式

在此總結一下Map的5種遍歷方式:

  • 第一種方法,foreach map.keySet()
  • 第二種方法,foreach map.values()
  • 第三種方法,foreach map.entrySet()
  • 第四種方法,map.entrySet().iterator()
  • 第五種方法,map.forEach()

前兩種方法分別foreach遍歷Map的keySet()和values(),是最容易想出來的方法:

// 第一種方法,foreach keySet
for (Integer key : testMap.keySet()) {
    System.out.print(key + "-" + testMap.get(key) + "\t");
}
// 第二種方法,foreach values
for (String value : testMap.values()) {
    System.out.print(value + "\t");
}

第三、第四種方法使用到了Map的entrySet()進行遍歷,本質是一樣的(IDEA建議將第四種改爲第三種):

// 第三種方法,foreach entrySet
for (Map.Entry<Integer, String> entry : testMap.entrySet()) {
    System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
}
// 第四種方法,entrySet iterator
Iterator<Map.Entry<Integer, String>> it = testMap.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry<Integer, String> entry = it.next();
    System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
}

第五種則是Java8新出的一種遍歷方式:

(值得注意的是,這種方法無法改變變量的值,會提示Variable used in lambda expression should be final or effectively final)

// 第五種方法,Map的forEach方法,Java8獨有
testMap.forEach((key, value) -> {
    System.out.print(key + "-" + value + "\t");
});

最後,所有的代碼如下:

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

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> testMap = new HashMap<>();

        testMap.put(1, "One");
        testMap.put(2, "Two");
        testMap.put(3, "Three");
        testMap.put(4, "Four");
        testMap.put(5, "Five");

        // 第一種方法,foreach keySet
        for (Integer key : testMap.keySet()) {
            System.out.print(key + "-" + testMap.get(key) + "\t");
        }
        System.out.println("\nforeach keySet");

        // 第二種方法,foreach values
        for (String value : testMap.values()) {
            System.out.print(value + "\t");
        }
        System.out.println("\nforeach values");

        // 第三種方法,foreach entrySet
        for (Map.Entry<Integer, String> entry : testMap.entrySet()) {
            System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
        }
        System.out.println("\nforeach entrySet");

        // 第四種方法,entrySet iterator
        Iterator<Map.Entry<Integer, String>> it = testMap.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, String> entry = it.next();
            System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
        }
        System.out.println("\nentrySet iterator");

        // 第五種方法,Map的forEach方法,Java8獨有
        testMap.forEach((key, value) -> {
            System.out.print(key + "-" + value + "\t");
        });
        System.out.println("\nMap.forEach()");
    }
}

運行結果:

1-One 2-Two 3-Three 4-Four 5-Five
foreach keySet
One Two Three Four Five
foreach values
1-One 2-Two 3-Three 4-Four 5-Five
foreach entrySet
1-One 2-Two 3-Three 4-Four 5-Five
entrySet iterator
1-One 2-Two 3-Three 4-Four 5-Five
Map.forEach()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章