ConcurrentHashMap以及HashMap,HashTable的区别

Posted 周蝌蚪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ConcurrentHashMap以及HashMap,HashTable的区别相关的知识,希望对你有一定的参考价值。

ConcurrentHashMap与HashMap,和HashTable 的区别?

ConcurrentHashMap是一个线程安全的key-value数据结构,而HashMap不是。
ConcurrentHashMap的数据结构是 数组 + 数组 + 单向链表。HashMap的数据结构是 数组 + 单向列表

HashTable也是线程安全,HashTable与HashMap的存储结构相同,HashTable不允许null为key值,而HashMap允许
ConcurrentHashMap是HashTable的升级版,线程均安全,但是拥有不同的数据结构,和不同的性能。

ConcurrentHashMap在1.7的实现是 初始化时默认初始化16个seqment,每个seqment中都会有一个与hashmap相同的HashEntry结构,采用数组 + 单向链表的方式组织KV数据的存储。在进行PUT时,会在hash到的seqment中加锁,锁的粒度为seqment而不是整个map。

--为啥要这么设计?减少热点,以提高并发能力。这就是与HashTable的区别。

而在1.8中,ConcurrentHashMap采用数组+单向链表+红黑树结合的方式来组织数据以提高读写性能.

ConcurrentHashMap中不再存在seqment,而是直接用Entry[]数据,减小加锁的粒度,提升写的性能。
ConcurrentHashMap中当单向链表中元素的个数超过8时,改用红黑树的存储结构以提高查询的速度。

 

以上是关于ConcurrentHashMap以及HashMap,HashTable的区别的主要内容,如果未能解决你的问题,请参考以下文章

ConcurrentHashmap原理

ConcurrentHashmap原理

ConcurrentHashMap实现原理以及源码分析

java并发编程的艺术,读书笔记第六章 concurrentHashMap以及并发容器的介绍

Java经典面试题:HashMap和HashTable以及ConcurrentHashMap分析

原子变量和CAS算法以及ConcurrentHashMap