map遍历测试结果
结论:一般情况下推荐使用enterSet的for循环(即以下的方法2),如果只是取key值可以使用keySet性能会更好。
因为keySet只取key,enterSet即取了key又取了value。
- public static void main(String[] args) throws Exception {
- ConcurrentHashMap<Long, ReqPacket> r = new ConcurrentHashMap<Long, ReqPacket>();
- long size = 2000000;
- // 方法1
- for (long i = 0; i < size; i++) {
- r.put(i, new ReqPacket());
- }
- System.out.println("方法1开始执行数:" + r.size());
- long t1 = System.currentTimeMillis();
- Iterator<Entry<Long, ReqPacket>> iter2 = r.entrySet().iterator();
- while (iter2.hasNext()) {
- // ReqPacket value=iter2.next().getValue();
- r.remove(iter2.next().getKey());
- }
- System.out.println("方法1 entrySet hasNext 执行时间:" + (System.currentTimeMillis() - t1) + " 结束数量:" + r.size());
- // 方法2
//推荐方法- for (long i = 0; i < size; i++) {
- r.put(i, new ReqPacket());
- }
- System.out.println("方法2开始执行数:" + r.size());
- long t2 = System.currentTimeMillis();
- for (Entry<Long, ReqPacket> entry2 : r.entrySet()) {
- ReqPacket value = entry2.getValue();
- r.remove(entry2.getKey());
- }
- System.out.println("方法2 entrySet for 执行时间:" + (System.currentTimeMillis() - t2) + " 结束数量:" + r.size());
- // 方法3
- for (long i = 0; i < size; i++) {
- r.put(i, new ReqPacket());
- }
- System.out.println("方法3开始执行数:" + r.size());
- long t3 = System.currentTimeMillis();
- for (Long key : r.keySet()) {
- ReqPacket value = r.get(key);
- r.remove(key);
- }
- System.out.println("方法3 keySet for 执行时间:" + (System.currentTimeMillis() - t3) + " 结束数量:" + r.size());
- // 方法4
- for (long i = 0; i < size; i++) {
- r.put(i, new ReqPacket());
- }
- System.out.println("方法4开始执行数:" + r.size());
- long t4 = System.currentTimeMillis();
- Iterator<Long> iter = r.keySet().iterator();
- while (iter.hasNext()) {
- // ReqPacket value = r.get(iter.next());
- r.remove(iter.next());
- }
- System.out.println("方法4 keySet hasNext 执行时间:" + (System.currentTimeMillis() - t4) + " 结束数量:" + r.size());
- }
测试结果:
- 方法1开始执行数:2000000
- 方法1 entrySet hasNext 执行时间:194 结束数量:0
- 方法2开始执行数:2000000
- 方法2 entrySet for 执行时间:175 结束数量:0
- 方法3开始执行数:2000000
- 方法3 keySet for 执行时间:230 结束数量:0
- 方法4开始执行数:2000000
- 方法4 keySet hasNext 执行时间:104 结束数量:0
map遍历测试结果的更多相关文章
- map遍历的四种方式
原文 http://blog.csdn.net/dayanxuqun/article/details/26348277 以下是map遍历的四种方式: // 一.推荐只用value的时候用,都懂的... ...
- java的Map遍历
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个mappublic ...
- java map遍历方式及效率
本文转载自Java Map遍历方式的选择. 只给出遍历方式及结论.测试数据可以去原文看. 如果你使用HashMap 同时遍历key和value时,keySet与entrySet方法的性能差异取决于ke ...
- 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历
分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...
- js中三个对数组操作的函数 indexOf()方法 filter筛选 forEach遍历 map遍历
indexOf()方法 indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1. 不使用indexOf时 var arr = ['apple','orange','pea ...
- 原生JS forEach()和map()遍历的区别以及兼容写法
一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
- map遍历性能记录
map遍历可以通过keySet或者entrySet方式. 性能上:entrySet略胜一筹,原因是keySet获取到key后再根据key去获取value,在查一遍,所以慢一些. keySet: //先 ...
- forEach() 和 map() 遍历
1.forEach() 没有返回值. arr[].forEach(function(value,index,array){ //do something }) 参数:value数组中的当前项, i ...
- js的map遍历和array遍历
1. array遍历: [1].forEach() forEach是ES5中操作数组的一种方法,主要功能是遍历数组.forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第 ...
随机推荐
- 出现Fatal IO error 11 (资源暂时不可用) on X server :0.0.的可能原因及解决方案
我在使用python的过程当中发现了这个有这样的错误,后来看了下面这篇文档才知道原因所在. 最近在编写一个局域网的聊天工具,在编写客户端时,我把界面部分和事件处理函数写好后,准备再开一个线程用于接收服 ...
- OCR是用来做什么的
OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译成 ...
- IE10、IE11 无法写入Cookie
IE10.IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题 你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的, ...
- unity, SkinnedMeshRenderer.updateWhenOffscreen
发现,必须勾选update when offscreen,当skinnedMeshRenderer发生形变时bounds才会更新.
- 理解AngularJS的作用域Scope
AngularJS中,子作用域一般都会通过JavaScript原型继承机制继承其父作用域的属性和方法.但有一个例外:在directive中使用scope: { ... },这种方式创建的作用域是一个独 ...
- python3倒叙字符串
google测试工程师的一道题: 设计一个函数,使用任意语言,完成以下功能: 一个句子,将句子中的单词全部倒排过来,但单词的字母顺序不变.比如,This is a real world,输出结果为 w ...
- centos7 关闭SELINUX 防火墙
关闭SELINUXvi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXTYPE=targeted #注释掉SELINUX=disabled #增加 ...
- get跟post编码--转
1.Get是用来从服务器上获得数据(没有请求体),而Post是用来向服务器上传递数据(包含请求体). 2.Get将表单中数据的按照variable=value的形式,添加到action(服务)所指向的 ...
- R(三): R包原理及安装
包(package)是多个函数的集合,常作为分享代码的基本单元,代码封装成包可以方便其他用户使用.越来越多的R包正在由世界上不同的人所创建并分发,这些分发的R包,可以从CRAN 或 github 上获 ...
- 构建VIM下的C++编程环境
1.VIM配置 Vim强大的配置与功能,其来源基本上就两个地方:Vim插件以及Vim配置文件. Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下.一般情况下 ...