Map的多种遍历方式以及不同数据量下遍历效率的比较

先创建一个最常用的HashMap,塞一万条数据,紧接着开始遍历


//      创建一个基础Map
        Map<Integer, Integer> map1 = new HashMap<>();
        for (int i = 0; i < 10000; i++) {
            map1.put(i, i);
        }

//      keySet方法 利用两种不同的循环方式比较速度
        long l1 = System.currentTimeMillis();
        for (Integer int11:map1.keySet()
        ) {
            System.out.println(int11);
        }
        System.out.println(System.currentTimeMillis()-l1 + " forEach 遍历keySet() 花费时间");

        long l2 = System.currentTimeMillis();
        Iterator<Integer> iterator = map1.keySet().iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        System.out.println(System.currentTimeMillis()-l2 + " iterator 遍历keySet() 花费时间");


//        values() 利用两种不同的遍历方式比较速度
        long l3 = System.currentTimeMillis();
        for (Object obj : map1.values()
        ) {
            System.out.println(obj);
        }
        System.out.println(System.currentTimeMillis()-l3 + " forEach 遍历values() 花费时间");


        long l4 = System.currentTimeMillis();
        Iterator<Integer> iterator2 = map1.values().iterator();
        while (iterator2.hasNext()) {
            System.out.println(iterator2.next());
        }
        System.out.println(System.currentTimeMillis()-l4 + " iterator 遍历values() 花费时间");



//      entrySet() 利用两种不同的遍历方式遍历key比较速度
        long l5 = System.currentTimeMillis();
        Iterator<Map.Entry<Integer, Integer>> iterator3 = map1.entrySet().iterator();
        while (iterator3.hasNext()) {
            System.out.println(iterator3.next().getKey());
        }
        System.out.println(System.currentTimeMillis()-l5 + " iterator 遍历entrySet()中的key 花费时间");

        long l6 = System.currentTimeMillis();
        for (Map.Entry<Integer, Integer> entry:map1.entrySet()
             ) {
            System.out.println(entry.getKey());
        }

        System.out.println(System.currentTimeMillis()-l6 + " for 遍历entrySet()中的key  花费时间");



        //      entrySet() 利用两种不同的遍历方式遍历value比较速度
        long l7= System.currentTimeMillis();
        Iterator<Map.Entry<Integer, Integer>> iterator4 = map1.entrySet().iterator();
        while (iterator4.hasNext()) {
            System.out.println(iterator4.next().getValue());
        }
        System.out.println(System.currentTimeMillis()-l7 + " iterator 遍历entrySet()中的value 花费时间");

        long l8 = System.currentTimeMillis();
        for (Map.Entry<Integer, Integer> entry:map1.entrySet()
        ) {
            System.out.println(entry.getValue());
        }

        System.out.println(System.currentTimeMillis()-l8 + " for 遍历entrySet()中的value  花费时间");



一万条数据下,结果:

keySet : iterator遍历快
values : 俩差不多
entrySet -> key : 俩差不多,或许再大数据量下会见分晓
entrySet -> value : 俩差不多,或许再大数据量下会见分晓
keySet -> value :俩差不多,或许再大数据量下会见分晓

既然难以见分晓,那就换10万条数据,由于输出结果太长,这里代码及控制台就不作展示,比较直接放出来:

forEach 遍历keySet() 花费时间:588
iterator 遍历keySet() 花费时间:713

forEach 遍历values() 花费时间:703
iterator 遍历values() 花费时间:1084

iterator 遍历entrySet()中的key 花费时间:720
for 遍历entrySet()中的key 花费时间:735

iterator 遍历entrySet()中的value 花费时间:517
for 遍历entrySet()中的value 花费时间:327

forEach 遍历keySet()后获取value 花费时间:347
iterator 遍历keySet()后获取value花费时间:360

十万条数据下对比结果:
你TM用增强for就完事了!,至于你要用哪个方法,关我屁事

大家如果自己测试,比较不同方式的速率时,尽量做到一次性运行多种方式的代码,比如for循环和iterator一起运行测试,如果分开测试进行比较,则可能会因为网络状态等各种外部因素干扰而造成结果的不准确!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值