HashMap的两种遍历方式

方式一:

Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()){
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}

方式二:

Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()){
    Object key = iter.next();
    Object val = map.get(key);
}


做个测试:

(1)测试程序:

import java.util.*;

/**
 * Created by binchao on 2015/9/23.
 */
public class MapTest {

    public static void main(String[] args){
        System.out.println("正在生成键值对。。。");
        Map map = generateMap();
        System.out.println("开始遍历。。。");
        long starttime1 = System.currentTimeMillis();
        Fun1(map);
        long endtime1 = System.currentTimeMillis();
        System.out.println("方式一耗时:" + (endtime1 - starttime1) + "毫秒");
        System.out.println("开始遍历。。。");
        long starttime2 = System.currentTimeMillis();
        Fun2(map);
        long endtime2 = System.currentTimeMillis();
        System.out.println("方式二耗时:"+(endtime2 - starttime2)+"毫秒");

    }

    /**
     * 随机生成100W键值对
     * @return
     */
    public static Map generateMap(){
        Map m = new HashMap();
        for (int i=0;i<1000000;i++){
            m.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        return m;
    }

    /**
     * 方式1遍历
     * @param map
     */
    public static void Fun1(Map map){
        Iterator iter = map.entrySet().iterator();
        while (iter.hasNext()){
            Map.Entry entry = (Map.Entry) iter.next();
            Object key = entry.getKey();
            Object val = entry.getValue();
        }
    }

    /**
     * 方式2遍历
     * @param map
     */
    public static void Fun2(Map map){
        Iterator iter = map.keySet().iterator();
        while (iter.hasNext()){
            Object key = iter.next();
            Object val = map.get(key);
        }
    }
}

测试用例:

(1)测试一

数据量 1W 10W 50W 100W 500W 1000W
方式一耗时 4ms 11ms
26ms 37ms 160ms
--
方式二耗时 9ms 16ms 48ms 70ms 327ms --

(2)测试二

数据量
1W 10W 50W 100W 500W 1000W
方式一耗时 7ms 10ms
21ms 38ms 160ms
--
方式二耗时 0ms 14ms 40ms 72ms 328ms --

(3)测试三

数据量 1W 10W 50W 100W 500W 1000W
方式一耗时 4ms 12ms 21ms 37ms 167ms --
方式二耗时 6ms 19ms 42ms 72ms 335ms --

(4)平均值

数据量 1W 10W 50W 100W 500W 1000W
方式一耗时 5ms
11ms
22.7ms 37.3ms
162.3ms --
方式二耗时 5ms
16.3ms 43.3ms 71.3ms 330ms
--


通过测试,论效率,方式一效率高;方式二效率相对较低,不推荐使用。

你可能感兴趣的:(HashMap,遍历)