文档章节

Map遍历的时间比较

清尘V
 清尘V
发布于 2016/04/14 08:43
字数 616
阅读 67
收藏 3
点赞 1
评论 0

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
粉丝 43
博文 107
码字总数 47780
作品 0
青岛
程序员
Golang hashmap的使用及实现

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

馨宁 ⋅ 2017/05/25 ⋅ 0

C++STL容器的基本特性和原理

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

文剑Boy ⋅ 2016/04/10 ⋅ 0

java list三种遍历方法性能比较

一、对List的遍历有三种方式 List<String> list = new ArrayList<String>(); list.add("testone"); list.add(“testtwo”); ... 第一种: for(Iterator<String> it = list.iterator(); it.has......

双月通天 ⋅ 2015/11/09 ⋅ 0

2018学习计划——Java基础之集合

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

Ray丶Cxy ⋅ 05/10 ⋅ 0

Java容器类框架分析(3)HashMap源码分析

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

wustor ⋅ 2017/11/06 ⋅ 0

java遍历map方法

import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class MapTest { } 结果: 通过Map.keySet遍历key和value: key= 3 and value= 3 key= 2 and value= 2 ......

姚君 ⋅ 2014/03/14 ⋅ 0

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

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

thinkyoung ⋅ 2014/12/17 ⋅ 0

Java集合的Stack、Queue、Map的遍历

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

again-Y ⋅ 2013/07/11 ⋅ 0

LeetCode笔记:496. Next Greater Element I

问题(Easy): You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements ......

Cloudox_ ⋅ 01/10 ⋅ 0

HashMap循环遍历方式及其性能对比

主要介绍HashMap的四种循环遍历方式,各种方式的性能测试对比,根据HashMap的源码实现分析性能结果,总结结论。 1. Map的四种遍历方式 下面只是简单介绍各种遍历示例(以HashMap为例),各自优...

闪电 ⋅ 2016/05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 24分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 44分钟前 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 49分钟前 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 56分钟前 ⋅ 0

文件压缩和打包zip、tar

第六章 文件压缩和打包 6.5 zip压缩工具 zip命令可以用来解压缩文件,或者对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。 注意:...

弓正 ⋅ 57分钟前 ⋅ 0

vuex

一、状态对象如何赋值给内部对象。三种方式: 1、使用computed赋值,一定要写this,不然找不到$store。 computed:{ count(){ return this.$store.state.count; }} 2、通...

大美琴 ⋅ 今天 ⋅ 0

javaScript 设计模式

1、构造函数模式 ` /** 构造一个动物的函数 */ function Animal(name, color){ this.name = name; this.color = color; this.getName = function(){ return this.name; } } // 实例一个对象 ......

fangPeng_ ⋅ 今天 ⋅ 0

日常嘚瑟:TeamCity构建中解压和打包tar

要弄一个新的构建,很简单,从两个构建的tar格式Artifact中分别取一部分,重新打一个tar。 所以,我去写个脚本用curl下载两个依赖的Artifact,然后解压移动重新打个tar? 开什么玩笑,我的技...

谷永权 ⋅ 今天 ⋅ 0

Istio官方文档中文版

阅读目录 Istio官方文档中文版 回到目录 Istio官方文档中文版 http://istio.doczh.cn/ https://istio.io/docs/concepts/what-is-istio/goals.html 为什么要使用Istio? 在从单体应用程序向分...

xiaomin0322 ⋅ 今天 ⋅ 0

CentOS 7 Omnibus 包安装 GitLab 并汉化记录

系统环境 操作系统:CentOS 7GitLab:gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm 下载Omnibus安装包 使用国内镜像加速下载地址 # wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el......

admin_qing ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部