Java中Iterator、forEach和forEach()方法遍历的效率

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37490221/article/details/82972994

代码如下:

package Common;

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

/**
 * @Description 探究Iterator、forEach和forEach()方法遍历的效率
 * @Author zaomianbao
 * @Date 2018/10/8
 **/
public class TestForEach {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (int i = 0;i<Integer.parseInt(args[0]);i++){
            map.put("a"+i,i);
        }
        long start = System.nanoTime();
        for(Map.Entry<String,Integer> entry : map.entrySet()){}
        System.out.println(System.nanoTime()-start);
        start = System.nanoTime();
        Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String,Integer> entry = iterator.next();
        }
        System.out.println(System.nanoTime()-start);
        start = System.nanoTime();
        for (String key : map.keySet()){
            Integer value = map.get(key);
        }
        map.entrySet().forEach(entry-> {});
        System.out.println(System.nanoTime()-start);
    }
}

多次启动主函数,分别携带参数值为:10、100、1000、10000、100000,相同的参数值重复运行5次,获得的打印结果如下
10次

628253
6436
58975543
455315
6126
76228178
523498
6841
84841845
442094
6915
92031103
366497
8356
59764714

100次

585780
63333
84507714
664024
64592
68957366
2161189
134513
86621508
595209
62984
114691366
631676
47040
136832860

1000次

1022002
380109
58950806
1201523
271617
60502112
1549107
935867
103734503
945515
390831
99793278
945515
390831
99793278

10000次

2747452
1455606
71369223
6688383
4188905
82243723
2814683
1117111
67327629
4780399
1006431
82984210
8786602
2159296
101241859

100000次

11479736
6648269
87059301
22311790
19702363
118463997
9932436
5294044
86621222
8282025
5734824
87417553
7818475
5255393
82609492

总结

这里博主仅仅对map中存放的内容进行遍历,但并没有进行复杂的业务处理,甚至连打印都没有,从10、100到1000、10000和100000,我们发现总体来说Iterator的效率最高,forEach次之,forEach()方法最慢。那么,是不是在生产中,我们就应该多使用Iterator呢,而不适用Java8新引进的forEach()方法呢?当然不是。因为在实际生产环境当中,每个循环里都有复杂的业务逻辑,和这些复杂的业务逻辑相比,这里相差的纳秒级别的数值就显得不值一提,当然,效率差距还是有的。如果说你的项目对事件效率要求特别高,使用Iterator就挺好,那如果你极致地追求代码的整洁,那么Java8中的forEach()方法是你的不二之选。

猜你喜欢

转载自blog.csdn.net/weixin_37490221/article/details/82972994
今日推荐