文档章节

Map遍历的时间比较

清尘V
 清尘V
发布于 2016/04/14 08:43
字数 616
阅读 68
收藏 3

map的四种遍历方法,点此查看

具体测试代码如下:

    int num = 1000000;

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

    System.out.println("map设值");
    for (int i = 0; i < num; i++) {
        map.put(i, UUID.randomUUID().toString());
    }

    System.out.println("entrySet方法:可以同时获取key和value,推荐这种方法");

    FbJobResult result = Freebencher.benchmark(new FbTarget() { //the behavior
                                                   @Override
                                                   public boolean invoke() {
                                                       Set<Map.Entry<Integer, String>> entrySet = map.entrySet();

                                                       for (Map.Entry<Integer, String> entry : entrySet) {
                                                           Integer key = entry.getKey();
                                                           String value = entry.getValue();

                                                       }
                                                       return true;
                                                   }
                                               }, 10, // concurrency,
            10 // number of tests to run
    );
    System.out.println("-------entrySet方法时间----------");
    System.out.println(result.report());
    System.out.println("*****************************************");


    System.out.println("keySet方法:先获取key,再获取value");
    final Set<Integer> keySet = map.keySet();

    result = Freebencher.benchmark(new FbTarget() { //the behavior
                                       @Override
                                       public boolean invoke() {
                                           for (Integer key : keySet) {
                                               String value = map.get(key);
                                           }
                                           return true;
                                       }
                                   }, 10, // concurrency,
            10 // number of tests to run
    );
    System.out.println("-------keySet方法时间----------");
    System.out.println(result.report());
    System.out.println("*****************************************");


    System.out.println("values方法:只获取value");

    result = Freebencher.benchmark(new FbTarget() { //the behavior
                                       @Override
                                       public boolean invoke() {
                                           Collection<String> values = map.values();
                                           for (String value : values) {
                                           }
                                           return true;
                                       }
                                   }, 10, // concurrency,
            10 // number of tests to run
    );
    System.out.println("-------values方法时间----------");
    System.out.println(result.report());
    System.out.println("*****************************************");


    System.out.println("entrySet.iterator方法:迭代器");

    result = Freebencher.benchmark(new FbTarget() { //the behavior
                                       @Override
                                       public boolean invoke() {
                                           Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
                                           while (iterator.hasNext()) {
                                               Map.Entry<Integer, String> next = iterator.next();
                                               Integer key = next.getKey();
                                               String value = next.getValue();

                                           }

                                           return true;
                                       }
                                   }, 10, // concurrency,
            10 // number of tests to run
    );
    System.out.println("-------entrySet.iterator方法时间----------");
    System.out.println(result.report());
    System.out.println("*****************************************");


下面查看四种遍历消耗1000000条数据的消耗时间,测试方法用到的工具包是Freebencher

map设值
entrySet方法:可以同时获取key和value,推荐这种方法
Test started.
Awaiting termination...
Test completed.
-------entrySet方法时间----------
Concurrency:             10
Time taken for tests:    112ms
Successful tests:        10
Failed tests:            0
Tests per second:        89.28571428571429
Mean time per test:      88.2ms
Percentage of the test finished within a certain time (ms)
50%:                     88
60%:                     93
70%:                     101
80%:                     104
90%:                     109
95%:                     110
98%:                     110
99%:                     110
100%:                    110

*****************************************
keySet方法:先获取key,再获取value
Test started.
Awaiting termination...
Test completed.
-------keySet方法时间----------
Concurrency:             10
Time taken for tests:    218ms
Successful tests:        10
Failed tests:            0
Tests per second:        45.87155963302752
Mean time per test:      182.5ms
Percentage of the test finished within a certain time (ms)
50%:                     183
60%:                     211
70%:                     214
80%:                     215
90%:                     215
95%:                     216
98%:                     216
99%:                     216
100%:                    216

*****************************************
values方法:只获取value
Test started.
Awaiting termination...
Test completed.
-------values方法时间----------
Concurrency:             10
Time taken for tests:    123ms
Successful tests:        10
Failed tests:            0
Tests per second:        81.30081300813008
Mean time per test:      96.2ms
Percentage of the test finished within a certain time (ms)
50%:                     105
60%:                     107
70%:                     109
80%:                     111
90%:                     113
95%:                     115
98%:                     115
99%:                     115
100%:                    115

*****************************************
entrySet.iterator方法:迭代器
Test started.
Awaiting termination...
Test completed.
-------entrySet.iterator方法时间----------
Concurrency:             10
Time taken for tests:    103ms
Successful tests:        10
Failed tests:            0
Tests per second:        97.0873786407767
Mean time per test:      82.6ms
Percentage of the test finished within a certain time (ms)
50%:                     83
60%:                     90
70%:                     91
80%:                     94
90%:                     97
95%:                     103
98%:                     103
99%:                     103
100%:                    103

*****************************************


个人博客:http://www.whereta.com

© 著作权归作者所有

共有 人打赏支持
上一篇: Java SPI机制
下一篇: Disconf部署安装
清尘V
粉丝 41
博文 107
码字总数 47780
作品 0
青岛
程序员
私信 提问
Golang hashmap的使用及实现

原作者丨icexin(饼干) 基本语法 定义hashmap变量 由于go语言是一个强类型的语言,因此hashmap也是有类型的,具体体现在key和value都必须指定类型,比如声明一个key为string,value也是str...

馨宁
2017/05/25
0
0
2018学习计划——Java基础之集合

Java——集合 前言 相信做开发的老铁们,不管你是做Java、Android、还是其他的语言,我相信很多都遇到过集合这个名词,而且我相信很多的老铁在进行大公司面试的时候,一定不可避免的会被问到...

Ray丶Cxy
05/10
0
0
C++STL容器的基本特性和原理

STL的容器可以分为以下几个大类: 一:序列容器,有vector, list, deque, string. 二 : 关联容器,有set, multiset, map, mulmap, hashset, hashmap, hashmultiset, hashmultimap 三: 其他的杂...

文剑Boy
2016/04/10
0
0
Java容器类框架分析(3)HashMap源码分析

概述 在分析HashMap的源码之前,先看一下HashMap在数据结构中的位置,常见的数据结构按照逻辑结构跟存储结构可以做如下划分: 数据结构分类 先看一下源码中的注释 Hash table based impleme...

wustor
2017/11/06
0
0
Java集合的Stack、Queue、Map的遍历

在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack、Queue、Map类型的遍历,还是有一些讲究的。 最近看了一些代码,在便利Map时候,惨不忍睹,...

again-Y
2013/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript 继承使用解析

继承,通俗地说,之前你写过一些类,这些类中有一些是而你现在要写的类的功能的子集或者基本相同,那么你不用完全重新写一个新的类,你可以把之前写的类拿过来使用.这样的一种代码重用过程就叫做继...

前端攻城小牛
16分钟前
0
0
深入解析JavaScript 原型继承

JavaScript 原型继承,学习js面向对象的朋友可以看看。十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 Object.prototype JavaScript是...

前端攻城老湿
18分钟前
0
0
2018阿里云双12——年末钜惠,低至2折

活动链接地址:https://m.aliyun.com/act/team1212/?params=N.JlJCGqQNL4

城市之雾
18分钟前
0
0
VMware前路难测,多个厂家群雄逐鹿

导读 以VMware为例,虚拟机巨头公布了第二财季报告所示,它第二财季收入同比增长13%,达到了21.7亿美元,而且该公司收入和每股收益均超出预期。 在人们高谈Salesforce、亚马逊等新兴云计算厂...

问题终结者
20分钟前
0
0
Vuex的初探与实战小结

1.概述 每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。 Vuex 和单纯的全局对象有以下两点不同: 1.Vuex 的状态存储是响...

peakedness丶
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部