HashMap,Hashtable和ConcurrentHashMap

HashMap,Hashtable和ConcurrentHashMap

HashMap和Hashtable的区别

主要有三方面:线程安全性,同步以及速度

  1. HashMap可以接受null的键和null的值,而Hashtable不行
  2. HashMap是非synchronized,而Hashtable是synchronized,所以Hashtable是线程安全的,多个线程可以共享同一个Hashtable,而HashMap不行。可以使用Collections.synchronizedMap(Map<K,V> m)方法来从HashMap中获取线程安全的Map。
  3. 因为Hashtable是线程安全的,需要进行同步,所以单线程环境下速度比HashMap慢。

ConcurrentHashMap和Hashtable的区别

  1. Java5引入了ConcurrentHashMap
  2. Hashtable和ConcurrentHashMap都可以用于多线程环境,但是和Collections.synchronizedMap方法获取的
    线程安全的Map一样,Hashtable仅有单个锁,对整个集合加锁。所以当Hashtable的大小增到一定程度时候,性能
    会急剧下降,因为迭代时需要整个集合需要被锁定更长的时间。
  3. ConcurrentHashMap中引入分割(segmentation),无论它变得多大,仅仅需要锁定map的某个部分,而其它的线程不需要
    等到迭代完成才能访问map。

ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。

HashMap和Hashtable的区别

ConurrentHashMap和Hashtable的区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容