記錄:java幾種map遍歷方式

使用HashMap來完成Map的遍歷,主要記錄Map遍歷的過程:

  • 第一種:

ForEach循環進行遍歷

public static void forEachTest() {
    //注意此處的泛型不是基本類型而是其包裝類型
    //阿里java編程規範中強調聲明時最好默認大小
    Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
    //put時可直接put基本類型,可瞭解裝箱和拆箱
    map.put(1,1);
    map.put(2,2);
    map.put(3,3);
    for (Map.Entry<Integer,Integer> entry : map.entrySet()) {
        System.out.println("map key :" + entry.getKey() + ";map value :" + entry.getValue());
    }
}

 

  • 第二種:

ForEach迭代鍵值對

public static void forEachKeyValueTest() {
    Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
    map.put(1,1);
    map.put(2,2);
    map.put(3,3);
    for (Integer key : map.keySet()) {
        System.out.println("map key :" + key + ";map value :" + map.get(key));
    }

    for (Integer value : map.values()) {
        System.out.println("map value :" + value);
    }
}

 

  • 第三種:

迭代器模式

public static void iteratorTest() {
    Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
    map.put(1,1);
    map.put(2,2);
    map.put(3,3);
    //不帶泛型
    Iterator iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry entry = (Map.Entry) iterator.next();
        System.out.println("map key :" + entry.getKey() + ";map value :" + entry.getValue());
    }
    //帶泛型
    Iterator<Map.Entry<Integer,Integer>> entryIterator = map.entrySet().iterator();
    while (entryIterator.hasNext()) {
        Map.Entry<Integer,Integer> entry = entryIterator.next();
        System.out.println("map key :" + entry.getKey() + ";map value :" + entry.getValue());
    }

}

 

  • 第四種:

lambda模式迭代

public static void lambdaTest() {
    Map<Integer,Integer> map = new HashMap<Integer, Integer>(3);
    map.put(1,1);
    map.put(2,2);
    map.put(3,3);
    //x,y爲參數代表key和value
    map.forEach((x,y) -> System.out.println("map key :" + x + ";map value :" + y));
}

 

對比幾種遍歷的效率

《阿里巴巴java開發手冊》時候,有一條推薦的規約: 【推薦】使用entrySet遍歷Map類集合KV,而不是keySet方式進行遍歷。 說明:keySet其實是遍歷了2次,一次是轉爲Iterator對象,另一次是從hashMap中取出key所對應的value。而entrySet只是遍歷了一次就把key和value都放到了entry中,效率更高。

引用:原文鏈接

foreachKeySet 遍歷 map耗時: 24 ms
foreachEntry 遍歷 map耗時: 17 ms
iteratorEntry 遍歷 map耗時: 16 ms
lambda 遍歷 map耗時: 59 ms

 

 

 

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