您的位置:首页 > 编程语言 > Java开发

Java HashMap 遍历方式性能探讨

2017-09-07 14:56 615 查看
JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历

HashMap四种遍历查询方式耗时性能对比

Map<String, String> map = new HashMap<String, String>();

        int num = 5000000;

        String key, value;

        // 存放500万条数据

        for (int i = 1; i <= num; i++) {

            key = "" + i;

            value = "value";

            map.put(key, value);

     }

1.keySet:

    Map map=new HashMap();

    Iterator it=map.keySet().iterator();

    Object key;

    Object value;

    while(it.hasNext()){

    key=it.next();

    value=map.get(key);

    System.out.println(key+":"+value);

    }

时间:只获取key  50;获取key和value 170

2:entrySet:

    Map map=new HashMap();

    Iterator it=map.entrySet().iterator();

    Object key;

    Object value;

    while(it.hasNext()){

    Map.Entry entry = (Map.Entry)it.next();

    key=entry.getKey();

    value=entry.getValue();

    System.out.println(key+"="+value);

    }

时间:只获取key或获取value 时间差不多 110-140;获取key和value  140

3:      

for (String key1 : map.keySet()) {

            value = map.get(key1);

}

时间:170   

4:

for (Entry<String, String> entry1 : map.entrySet()) {
key = entry1.getKey();
value = entry1.getValue();
}


时间:130

比较:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。

2.1 使用Java8的foreach+lambda表达式遍历Map

    Map<String, Integer> items = new HashMap<>();

    items.put("A", 10);

    items.put("B", 20);

    items.put("C", 30);

    items.put("D", 40);

    items.put("E", 50);

    items.put("F", 60);

     

    items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));

     

    items.forEach((k,v)->{

        System.out.println("Item : " + k + " Count : " + v);

        if("E".equals(k)){

            System.out.println("Hello E");

        }

    });

时间:158
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: