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 日
下一篇 2011 年 08 月 30 日

相关推荐

  • 匹配邮箱的工具类

    参考做了一个匹配邮箱的工具类,方便以后使用: package com.util; import java.util.List; import java.util.Map; /** * 通过正则匹配全文邮箱 * * @author Stany 2011-08-05 */ public class EmailUtil { /** *...

    闲话杂谈 2011 年 08 月 05 日
  • 在URLHttpConnection中使用代理服务器

    原文出处: 在URLHttpConnection中使用代理服务器 作者: Jet Mah from Java堂 在JDK5之前如果在URLHttpConnection中使用代理服务器的话,只要在URL.openConnection()之前加入以下代码就可以: Properties prop = S...

    闲话杂谈 2011 年 08 月 25 日
  • 老钟非常LOVE的一些电影

    挚爱、视觉和听觉都超级一流的电影: 钢铁侠 Iron Man(2008.04.30) 无敌浩克 The Incredible Hulk(2008.08.20) 钢铁侠2 Iron Man 2(2010.04.25) 雷神托尔 Thor(2011.05.02) 美国队长 Captain America: Th...

    2014 年 04 月 22 日
  • 熟读规则:预防维权师敲诈发票 货到付款等手段遵守天猫规则

    案例:朋友的天猫店被投诉师坑钱,因新手客服错发说满500订单才开发票,惨遭被骗子投诉师坑钱, 骗子投诉师先拍下店铺一件廉价商品,然后向店铺人员索要发票,前后不到一分钟,骗子投诉师马上联系第二个不同...

    闲话杂谈 2013 年 08 月 02 日
  • iphone 验机

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

    闲话杂谈 2011 年 08 月 08 日
  • bo.android应用:电话拨号器

    看了传智播客的视频 初学,老鸟别笑 通过两个模拟器,可是实现拨号、通话 ======================================================= 先看效果图:   ======================================================= ...

    2012 年 02 月 01 日
  • 解决servlet返回jsp中文乱码

    servlet返回中文到jsp页面,出现乱码 解决方式: 声明编码在先,out在后 response.setContentType("text/html;charset=gbk"); PrintWriter out = response.getWriter();   转载请注明出处: http://www.laoz...

    闲话杂谈 2012 年 02 月 02 日
  • 判断商标相同或近似的标准

    上如何界定相同或类似商品、服务之后,有必要对相同商标、近似商标的概念再进行界定,之后才有利于认定商标是否相同或近似。 1.相同商标 相同商标是指构成商标的要素完全相同,商标在整体上不存在差别或者只存在...

    闲话杂谈 2014 年 05 月 23 日
  • 哪个银行信用卡最好用?哪个银行信用卡最好

    四大国有商业银行: 建设银行: 优点: 1、免首年年费,刷三次免次年年费; 2、短信服务免费; 3、取现手续费仅0.5%; 4、挂失手续费50元; 5、有直接针对有车族信用卡,只要有1.4排量以上的车均能轻松办卡。 缺...

    闲话杂谈 2011 年 10 月 09 日
  • synchronized 的4种用法

    概述: synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方...

    闲话杂谈 2011 年 08 月 23 日

评论列表(2条)

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

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

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

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