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回调有三个参数:第一个参数是遍历的数组内容,第 ...
随机推荐
- A Complete Tutorial on Tree Based Modeling from Scratch (in R & Python)
A Complete Tutorial on Tree Based Modeling from Scratch (in R & Python) MACHINE LEARNING PYTHON ...
- Html-双斜杠//开头的URL(依赖协议的URL)
今天看京东HTTPS,发现链接都是这种 <a href="//chaoshi.jd.com">京东超市</a> URL是以双斜杠"//" ...
- MySQL数据库update更新子查询
比如: ? 1 2 3 4 UPDATE test.tb_vobile a set a.name = '111 ' WHERE a.id = (select max(id) id from test. ...
- Send an email with format which is stored in a word document
1. Add a dll reference: Microsoft.Office.Interop.Word.dll 2. Add the following usings using Word = M ...
- 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句.txt
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- Js RegExp对象
1 语法 1.1 直接量语法 /pattern/attributes 1.2 创建RegExp对象 new RegExp(pattern, attributes) 1.3 说明 pattern是正则表 ...
- ASP.NET MVC 程序 报错“CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义”的解决办法
运行MVC程序,具体报错信息如下: 解决方法: 打开Web.config在assemblies下加入<add assembly="System.Data.Entity, Version ...
- Math.Round函數
Math.Round這個函數的解釋是將值按指定的小數位數舍入,但並不就是四捨五入.這種舍入有時稱為就近舍入或四舍六入五成雙 其實在 VB, VBScript, C#, J#, T-SQL 中 Roun ...
- 【linux】rpm常见命令
查看包依赖模块:http://www.rpmfind.net/ rpm -ivh [包名] :安装rpm包 rpm -e [包名] :删除rpm包 rpm -aq [包名] :查询rpm包 rp ...