HashMap vs FastHashMap

Test Code:

01 import java.util.HashMap;
02 import java.util.Map;
03 
04 import org.apache.commons.collections.FastHashMap;
05 
06 /**
07  <p>HashMapTester.java</p>
08  
09  <p>
10  * <a href="HashMapTester.java.html"><i>View Source</i></a>
11  </p>
12  
13  @author $Author$
14  @version $Reversion$ $Date$
15  */
16 public class HashMapTester {
17 
18     /**
19      
20      */
21     public HashMapTester() {
22         super();
23     }
24     
25     public static void main(String[] args){
26         int N = 50000;
27         long start = System.currentTimeMillis();
28         Map hm = new HashMap(N);
29         for(int i = 0; i < N ; i++){
30             hm.put(new Long(i),"HashMap " + i);
31         }
32         long end = System.currentTimeMillis() - start;
33         System.out.println("HashMap put " + N + " Object using" (end/1000.0"s");
34         start = System.currentTimeMillis();
35         FastHashMap fhm = new FastHashMap(N);
36         //fhm.setFast(false);
37         for(int i = 0; i < N ; i++){
38             fhm.put(new Long(i),"FastHashMap " + i);
39         }
40         end = System.currentTimeMillis() - start;
41         System.out.println("FastHashMap put " + N + " Object using" (end/1000.0"s");
42         
43         
44         start = System.currentTimeMillis();
45         for(int i = 0; i < N ; i++){
46             hm.get(new Long(i));
47         }
48         end = System.currentTimeMillis() - start;
49         System.out.println("HashMap get " + N + " Object using" (end/1000.0"s");
50         fhm.setFast(true);
51         start = System.currentTimeMillis();
52         for(int i = 0; i < N ; i++){
53             fhm.get(new Long(i));
54         }
55         end = System.currentTimeMillis() - start;
56         System.out.println("FastHashMap get " + N + " Object using" (end/1000.0"s");
57         
58     }
59 
60 }

Result:

HashMap put 50000 Object using1.021s
FastHashMap put 50000 Object using1.221s
HashMap get 50000 Object using0.561s
FastHashMap get 50000 Object using0.04s
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HashMap 和 ConcurrentHashMap 是 Java 中两种常用的 Map 实现。它们的主要区别在于线程安全性和性能方面。 1. 线程安全性: - HashMapHashMap 是非线程安全的,如果多个线程同时访问 HashMap,可能会导致数据不一致或抛出 ConcurrentModificationException 异常。 - ConcurrentHashMap:ConcurrentHashMap 是线程安全的,它通过使用分段锁(Segment)来实现并发访问。不同的 Segment 可以由不同的线程同时访问,提高了并发性能。 2. 写操作和读操作: - HashMap:在写操作时,需要加锁来保证线程安全,因此在高并发环境下,性能会受到影响。在读操作时,不需要加锁,因此性能较高。 - ConcurrentHashMap:ConcurrentHashMap 使用了分段锁,在写操作时只锁定对应的分段,不影响其他分段的并发读操作,因此在高并发环境下性能较好。 3. 迭代器: - HashMap:在使用迭代器遍历 HashMap 时,如果期间有其他线程修改了 HashMap,可能会抛出 ConcurrentModificationException 异常。 - ConcurrentHashMap:ConcurrentHashMap 的迭代器是弱一致性的,它不会抛出 ConcurrentModificationException 异常。迭代器可以反映出在创建迭代器之前的状态,并且可能会反映出其他线程对 ConcurrentHashMap 进行的最近修改。 综上所述,如果需要在多线程环境中使用 Map,推荐使用 ConcurrentHashMap,它提供了更好的并发性能和线程安全性。而在单线程环境下,HashMap 的性能可能会更好一些。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l_walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值