HashMap和Hashtable都实现了Map接口,其主要的区别有:线程安全性,同步(synchronization),以及效率。

 

  1. HashMap和Hashtable基本上没啥区别,除了HashMap是非synchronized的,也就是说,Hashmap是线程不安全的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
  2. Hashtable是线程安全的,其几乎每一个方法都很粗暴的使用synchronized锁,由于synchronized锁是重量级的锁,也就导致了Hashtable的效率很低,
  3. ConcurrentHashMap则是Hashtable的替代品,采用了分段锁机制,其效率远远高于Hashtable.
  4. ConcurrentHashMap是不允许key和value是null的

注:

1 在单线程下使用HashMap

2 多线程下使用Hashtable和ConcurrentHashMap。但ConcurrentHashMap的使用场景远远多于Hashtable。如果单纯的只考虑线程绝对安全,不考虑其效率,则使用Hashtable.

ConcurrentHashmap使用要点:

  • get():不涉及锁操作,
  • put(),remove(): 使用锁机制,但是不一定会出现锁竞争,这得益于其分段锁机制。默认允许16个线程并发使用,也就是默认效率提升16倍。
  • 迭代器的使用,由于其分段锁特性,其迭代的对象可能不是最新的数据,
  • putifAbsent():如果不存在,那么会向map中添加该键值对,并返回null。如果已经存在那么不会覆盖原有的值,直接返回已经存在的值。

 

posted on 2017-11-20 19:33  py_Im  阅读(173)  评论(0)    收藏  举报