HashMap与ConcurrentHashMap性能对比

目的是测试HashMap与ConcurrentHashMap性能

package com.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

/**
* HashMap与ConcurrentHashMap性能对比 <br/>
* 在相同条件下分别插入、遍历10W、50W、100W、200W、500W 数据 <br/>
* 记录遍历每种不同数据的耗时<br/>
* 2011-08-30
*
* @author http://www.laoz.net
*
*/
public class TestHashMap {
private static Map<Integer,String> hashMap = new HashMap<Integer,String>();
private static Map<Integer,String> cMap = new ConcurrentHashMap<Integer,String>();

/**
* 测试hashMap put数据
* @param num
*/
public static void testhashMapPut(int num){
long beginTime = System.currentTimeMillis();
for(int i=0;i<num;i++){
hashMap.put(i, "test");
}
System.out.println("HashMap :put耗时" + (System.currentTimeMillis()-beginTime) + "ms");
}

/**
* 测试concurrentHashMap put数据
* @param num
*/
public static void testCMapPut(int num){
long beginTime = System.currentTimeMillis();
for(int i=0;i<num;i++){
cMap.put(i, "test");
}
System.out.println("ConcurrentHashMap :put耗时" + (System.currentTimeMillis()-beginTime) + "ms");
}

/**
* 测试HashMap
*/
public static void testHashMap(){
long beginTime = System.currentTimeMillis();
for(Integer id:hashMap.keySet()){
hashMap.get(id);
}
System.out.println("HashMap :get耗时" + (System.currentTimeMillis()-beginTime) + "ms");
}

/**
* 测试 ConcurrentHashMap
*/
public static void testConcurrentHashMap(){
long beginTime = System.currentTimeMillis();
for(Integer id:cMap.keySet()){
cMap.get(id);
}
System.out.println("ConcurrentHashMap :get耗时" + (System.currentTimeMillis()-beginTime) + "ms");
}

public static void main(String[] args) {
System.out.println("测试10W数据");
testhashMapPut(100000);
testHashMap();
testCMapPut(100000);
testConcurrentHashMap();
System.out.println("==============================");

System.out.println("测试50W数据");
testhashMapPut(500000);
testHashMap();
testCMapPut(500000);
testConcurrentHashMap();
System.out.println("==============================");

System.out.println("测试100W数据");
testhashMapPut(1000000);
testHashMap();
testCMapPut(1000000);
testConcurrentHashMap();
System.out.println("==============================");

System.out.println("测试200W数据");
testhashMapPut(2000000);
testHashMap();
testCMapPut(2000000);
testConcurrentHashMap();
System.out.println("==============================");

System.out.println("测试500W数据");
testhashMapPut(5000000);
testHashMap();
testCMapPut(5000000);
testConcurrentHashMap();
System.out.println("==============================");
}
}

 

测试结果:

测试10W数据
HashMap :put耗时16ms
HashMap :get耗时0ms
ConcurrentHashMap :put耗时46ms
ConcurrentHashMap :get耗时16ms
==============================
测试50W数据
HashMap :put耗时125ms
HashMap :get耗时16ms
ConcurrentHashMap :put耗时250ms
ConcurrentHashMap :get耗时47ms
==============================
测试100W数据
HashMap :put耗时187ms
HashMap :get耗时47ms
ConcurrentHashMap :put耗时500ms
ConcurrentHashMap :get耗时109ms
==============================
测试200W数据
HashMap :put耗时750ms
HashMap :get耗时94ms
ConcurrentHashMap :put耗时1703ms
ConcurrentHashMap :get耗时235ms
==============================
测试500W数据
HashMap :put耗时2093ms
HashMap :get耗时219ms
ConcurrentHashMap :put耗时2906ms
ConcurrentHashMap :get耗时719ms
==============================

 

结论: 结论:无论是put还是get,ConcurrentHashMap耗时约是HashMap的2~3倍

版权所有,作者:老钟,如若转载,请注明出处:https://www.laoz.net/122.html

(0)
老钟
上一篇 2011 年 08 月 30 日 上午 9:47
下一篇 2011 年 08 月 30 日 下午 5:54

相关推荐

  • 谨慎处理 遍历ConcurrentHashMap

    最近发现内存中WriteThroughEntry数量突然很巨大,经过反复分析查找,发现是由于遍历ConcurrentHashMap不当导致的,遍 历时尽量使用values(),使用ConcurrentHashMap的entrySet()遍历会产生大量WriteThroughEntry对…

    闲话杂谈 2011 年 08 月 30 日
  • 天猫发票问题,注意事项

    天猫发票这个基本的规则真的大家要熟读 往往犯错导致犯规的就是这个问题,下面和大家分享一下规则 开发票不收费 (不收税点不加钱)可以开普通发票,也可以开增值税发票买家付了多少钱就开多少钱,…

    闲话杂谈 2014 年 02 月 14 日
  • 测试一下新编辑器的功能

    /**   * <p>   * 业务层<br/>   * 2012-02-09   * </p>   * @author Bo   *   */ publi…

    闲话杂谈 2012 年 03 月 22 日
  • 5.1节后杂谈一篇,关于新驾照,扣12分的行为

    劳动节,休息了几天,本来有非常多事情要做的,但是因为有更加重要的事情,所以假期必须回家去办事! 这世道,汽车已经非常普遍了,所以无论如何,都尽量有个驾照吧!之前大学时代一直没有去考,后来工作本想在广州…

    2014 年 05 月 04 日
  • 天猫客服应该注意的事项,转自互联网

    网上看到的,本身自己也想收集一些规则,然后归纳总结出来的,既然网上有了,就直接拿过来用,出处忘记是哪里了,如果下次找到再更新文章!天猫不同于集市,淘宝对于天猫商城店铺管理要比C店严格的多了,很多时候都…

    闲话杂谈 2013 年 08 月 19 日
  • eclipse报错,Background Indexer Crash Recovery

    启动eclipse,报错Background Indexer Crash Recovery网上找了很多东西,什么删除jar包等等,解决不了问题干脆一下子把eclipse给删除掉了重新弄一个,搞定

    闲话杂谈 2012 年 06 月 04 日
  • bo.android应用系列:文件创建

    目前功能:创建一个文件,并写入内容 ======================== 截图:               ======================== 部分代码: /** * <p> * 业务层<br/> * 2012-02-0…

    2012 年 02 月 10 日
  • 项目维护时,使用jacob出现的一些问题

    以下是经过搜索,总结网友的一些总结,目前我遇到的问题还没有解决~~ 等重启服务器再试试~   1、如果出现下面的错误 com.jacob.com.ComFailException: A COM exception has been encountered: At Invoke of: V…

    闲话杂谈 2011 年 09 月 16 日
  • 记录android的学习开发过程

    全面记录android的学习开发过程!!

    闲话杂谈 2011 年 06 月 28 日
  • iphone 验机

    你拿到机子查看sn码是否一致,就是机盒背面的sn序列号与卡槽上的sn序列号和手机-设置-通用-关于本机 里 面的序列号一样,如果有电脑,连接电脑,itunes上出现的序列号也应该一致。在有条件就用电脑上网,登陆 https…

    闲话杂谈 2011 年 08 月 08 日

评论列表(2条)

  • stupid 2012 年 02 月 21 日 上午 11:37

    没见过这么傻X的测试,你要用多线程并发才能测出区别阿!!

    • admin 2012 年 02 月 26 日 下午 4:26

      @stupid是呀,的确是傻X呀~~~
      之前根本不懂~嘿嘿~~