文档章节

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

© 著作权归作者所有

共有 人打赏支持
清尘V
粉丝 42
博文 107
码字总数 47780
作品 0
青岛
程序员
Golang hashmap的使用及实现

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

馨宁
2017/05/25
0
0
C++STL容器的基本特性和原理

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

文剑Boy
2016/04/10
0
0
2018学习计划——Java基础之集合

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

Ray丶Cxy
05/10
0
0
Java容器类框架分析(3)HashMap源码分析

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

wustor
2017/11/06
0
0
有关《查找两个List中的不同元素》的问题解答与编程实践

郑海波 2013-07-08 问题: 有List list1和List list2,两个集合各有上万个元素,怎样查找两个集合中不同的元素呢? 问题分析: 由于每个list中都有上万个元素,如果用简单的遍历查找算法,那么...

thinkyoung
2014/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++基础知识

链接:https://zhuanlan.zhihu.com/p/38399566 本文主要提一下以下三个区别: 引用必须初始化,而指针可以不初始化。 我们在定义一个引用的时候必须为其指定一个初始值,但是指针却不需要。 ...

悲催的古灵武士
7分钟前
0
0
Oracle备份脚本,保留10天数据

@echo off echo 删除10天前的备分文件和日志forfiles /p "D:\oracleback\backfile" /m *.dmp /d -10 /c "cmd /c del @path" forfiles /p "D:\oracleback\backfile" /m *.log /d -10......

lyle_luo
10分钟前
0
0
window版mysql备份数据

@echo off ::title name title db_backup ::color is green COLOR 2 ::defined value set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% if /i %time:~0,2% lss 10 set hh=0%time:~......

恋码之子
12分钟前
0
0
hashmap嘿嘿嘿

1、jdk1.7 数组加链表 2、链表存放数据:hashcode相同,Entry{key:键 value:值 next:下一个节点} 3、取模算法,计算出存放数组的下标 int index = key.hashCode()%tables.length;...

熊猫你好
25分钟前
0
0
ca证书创建和docker-api证书设置

openssl genrsa -aes256 -out ca-key.pem 4096 // 这一步的密码千万不能忘记,下面要用到 openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem# 国家:CN# 省:.# 市......

chenbaojun
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部