|
@@ -17,10 +17,22 @@ tags: Java
|
|
|
|
|
|
## 2 数据结构
|
|
|
|
|
|
+### 2.1 各种map对比
|
|
|
|
|
|
|
|
|
| Map | 数据结构 | 描述 |
|
|
|
| -------- | -------- | -------- |
|
|
|
| HashMap | 数组+链表/红黑树 | 非线程安全 |
|
|
|
| LinkedHashMap | 数组+双向链表 | 非线程安全,有序 |
|
|
|
-| ConcurrentHashMap | 数组+链表/红黑树 | 线程安全 |
|
|
|
+| ConcurrentHashMap | 数组+链表/红黑树 | 线程安全 |
|
|
|
+
|
|
|
+### 2.2 hash key 处理
|
|
|
+ 容量是2次幂,比如 一个16 的大小容量 在key 得到一个hashCode 后在进行 (16-1)& hashCode = index(存放的位置)
|
|
|
+ 位运算 15 的二进制 1111 位运算 就是相同位都是1 则为1 否则为0 比如 15 & 2 = 2 ,15 & 17 = 1
|
|
|
+
|
|
|
+### 2.3 hash冲突当 链表数据达到8会转换成红黑树数据结构,当红黑树退到大小为6时转换成链表 红黑树(O(logN))
|
|
|
+
|
|
|
+### 2.3 线程安全ConcurrentHashMap
|
|
|
+ ConcurrentHashMap 锁的维度是每个数组元素,每个entity都是用 volatile 进行修饰
|
|
|
+
|
|
|
+
|