|
|
@@ -421,7 +421,7 @@ Java 1.8 之后引入了**红黑树**,1.8 之后的 HashMap 有两种形态:
|
|
|
- **第 1 种**:数组 + 链表(哈希表)
|
|
|
- **第 2 种**:在哈希表满足了某些条件后,从「数组 + 链表」转换为「数组 + 红黑树」,保证性能不会降低
|
|
|
|
|
|
-简单来说:**链表的节点数超过 8 个,就转为红黑树**。
|
|
|
+简单来说:**链表的节点数超过 8 个,且数组长度大于 64 时,链表就转为红黑树**(两个条件需**同时满足**)。
|
|
|
|
|
|
### HashMap 关键常量
|
|
|
|
|
|
@@ -433,6 +433,20 @@ Java 1.8 之后引入了**红黑树**,1.8 之后的 HashMap 有两种形态:
|
|
|
| `UNTREEIFY_THRESHOLD` | `6` | 当节点长度小于 6 时,从红黑树退化回链表 |
|
|
|
| `MIN_TREEIFY_CAPACITY` | `64` | 数组 + 链表转红黑树的**第 2 个条件**:数组长度必须大于 64 |
|
|
|
|
|
|
+### 总结(HashMap 结构要点)
|
|
|
+
|
|
|
+```java
|
|
|
+// 来源:course/Demo05.java(注释部分·总结)
|
|
|
+1、HashMap的结构是 数组+链表
|
|
|
+2、达到一定条件,会转为 数组+红黑树
|
|
|
+3、树化条件:数组长度大于64,链表节点长度超过8。
|
|
|
+4、链表节点长度小于6就退化回链表。
|
|
|
+```
|
|
|
+
|
|
|
+1. **HashMap 的结构是「数组 + 链表」**,达到一定条件后转为「数组 + 红黑树」
|
|
|
+2. **树化条件(两个需同时满足)**:① 数组长度大于 64(`MIN_TREEIFY_CAPACITY`)② 链表节点长度超过 8(`TREEIFY_THRESHOLD`)
|
|
|
+3. **退化条件**:链表节点长度小于 6(`UNTREEIFY_THRESHOLD`)就退化回链表,避免频繁树化/退化造成抖动
|
|
|
+
|
|
|
### 代码示例
|
|
|
|
|
|
```java
|