EntrySet與KeySet遍歷Map及性能對比

Map作爲Java的一個基本集合類,在很多場所都會使用到它。在使用Map時,會經常會遇到需要遍歷整個Map情況。遍歷Map時,主要使用的是EntrySet以及KeySet這兩種遍歷方法。
以下是實現兩種遍歷方式的代碼:

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

/**
 * 遍歷Map
 */
public class IterateMapDemo {

    /**
     * 主函數
     * @param args
     */
    public static void main(String[] args) {
        Map<String, String> areaMap = new HashMap<String, String>();
        areaMap.put("Beijing", "北京");
        areaMap.put("Shanghai", "上海");
        areaMap.put("Tianjin", "天津");

        // 遍歷
        keySetIterateMap(areaMap);
        entrySetIterateMap(areaMap);
    }

    /**
     * keySet方式遍歷
     * @param mapInfo
     */
    private static void keySetIterateMap(Map<String, String> mapInfo) {
        // for循環遍歷
        Set<String> keySet = mapInfo.keySet();
        for (String key : keySet) {
            System.out.println("KeySet,For循環遍歷,Key:" + key + "Value:" + mapInfo.get(key));
        }

        // 迭代器遍歷
        Iterator<String> it = mapInfo.keySet().iterator();
        while (it.hasNext()) {
            String key = it.next();
            System.out.println("KeySet,Iterator遍歷,Key:" + key + "Value:" + mapInfo.get(key));
        }
    }

    /**
     * entrySet遍歷
     * @param mapInfo
     */
    private static void entrySetIterateMap(Map<String, String> mapInfo) {
        // for循環遍歷
        Set<Map.Entry<String, String>> entrySet = mapInfo.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            System.out.println("EntrySet,For循環遍歷,Key:" + entry.getKey() + "Value:" + entry.getValue());
        }

        // 迭代器遍歷
        Iterator<Map.Entry<String, String>> it = mapInfo.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> entry = it.next();
            System.out.println("EntrySet,Iterator循環遍歷,Key:" + entry.getKey() + "Value:" + entry.getValue());
        }
    }
}

性能對比
在數據量少的時候,兩種遍歷自然差距不會太大。但是當數據量增加的時候,就需要對比下哪種遍歷方式更快了。
以下是Map中具有1百萬條數據時,兩種遍歷方式的耗時信息(單位ms):

可以看出,EntrySet遍歷的速度要比keySet方法要快哦。這是因爲使用keySet遍歷時,當使用key值取得Map中的Value時,Map又遍歷了一遍。而EntrySe時,由於EntrySet本身就是key-value結構,所以直接將Map的key-value給取出來了,自然速度就要快上一些。另外,使用迭代器遍歷的話速度也會有一些提升。

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