文章目录
特别说明,下列工具类仅介绍其本身的特点,具体使用方法可查看HashMap集合。
看HashMap可按我
一、Hashtable
Hashtable出现的原因 : 在集合类中HashMap是比较常用的集合对象,但是HashMap是线程不安全的(多线程环境下可能会存在问题)。为了保证数据的安全性我们可以使用Hashtable,但是Hashtable的效率低下。
二、ConcurrentHashMap
ConcurrentHashMap是JDK5出现的,和Hashtable的区别主要在于其效率较高。
1.ConcurrentHashMapJDK7及其之前的原理
2.ConcurrentHashMapJDK8及其之后的原理
- 如果使用空参构造创建ConcurrentHashMap对象,则什么事情都不做。在第一次添加元素的时候创建哈希表
- 计算当前元素应存入的索引。
- 如果该索引位置为null,则利用cas算法,将本结点添加到数组中。
- 如果该索引位置不为null,则利用volatile关键字获得当前位置最新的结点地址,挂在他下面,变成链表。
- 当链表的长度大于等于8时,自动转换成红黑树以链表或者红黑树头结点为锁对象,配合悲观锁保证多线程操作集合时数据的安全性。