Hashtable和ConcurrentHashMap

文章目录


特别说明,下列工具类仅介绍其本身的特点,具体使用方法可查看HashMap集合。
看HashMap可按我

一、Hashtable

Hashtable出现的原因 : 在集合类中HashMap是比较常用的集合对象,但是HashMap是线程不安全的(多线程环境下可能会存在问题)。为了保证数据的安全性我们可以使用Hashtable,但是Hashtable的效率低下。

二、ConcurrentHashMap

ConcurrentHashMap是JDK5出现的,和Hashtable的区别主要在于其效率较高。

1.ConcurrentHashMapJDK7及其之前的原理

Hashtable和ConcurrentHashMap

2.ConcurrentHashMapJDK8及其之后的原理

Hashtable和ConcurrentHashMap

  1. 如果使用空参构造创建ConcurrentHashMap对象,则什么事情都不做。在第一次添加元素的时候创建哈希表
  2. 计算当前元素应存入的索引。
  3. 如果该索引位置为null,则利用cas算法,将本结点添加到数组中。
  4. 如果该索引位置不为null,则利用volatile关键字获得当前位置最新的结点地址,挂在他下面,变成链表。
  5. 当链表的长度大于等于8时,自动转换成红黑树以链表或者红黑树头结点为锁对象,配合悲观锁保证多线程操作集合时数据的安全性。

上一篇:LeetCode 387. 字符串中的第一个唯一字符


下一篇:20201218 两数之和