# 面试复盘填写样例：HashMap 树化条件

下面是一份**教学演练填写样例**，不是学员的真实面试记录，也没有求职结果。

## 一份填写完成的记录

| 字段 | 示例填写 |
| --- | --- |
| 本次问题 | HashMap 桶内有 8 个元素就一定转红黑树吗？ |
| 当时回答 | “长度达到 8 就树化，少于 6 就变回链表。” |
| 继续追问 | 表容量是多少？第 8 个还是新增第 9 个？删除和扩容拆分使用同一条件吗？ |
| 暴露的缺口 | 把常量记忆当成所有路径的行为；没有说明 JDK 版本和操作路径 |
| 核对范围 | OpenJDK JDK 21 GA，查看 `putVal`、`treeifyBin`、`split`、删除树节点的实现 |
| 证据位置 | [本站 HashMap 修订说明](https://qiuzhiwang.vip/javabgw/hashmapdcyl.html)中的源码链接和边界解释 |
| 下一步任务 | 对比表容量 32 与 64 时，同哈希键连续插入的调用路径，记录触发树化或扩容的位置 |
| 完成标准 | 能指出具体条件与调用分支，解释为什么不能只背 8、64、6 |

## 修订后的回答

以 OpenJDK JDK 21 的普通 `put` 链表路径为例，向桶中已有至少 8 个节点的链表追加节点时，会进入树化判断；表容量小于 64 时优先扩容。`TREEIFY_THRESHOLD = 8` 不能简化成“第 8 个节点一插入就一定变树”。

`UNTREEIFY_THRESHOLD = 6` 用于扩容拆分树桶等实现路径；删除树节点时还涉及树形状判断，不能把它说成所有删除操作都遵循的固定界线。具体解释与源码入口见 [JDK 21 HashMap 原理](https://qiuzhiwang.vip/javabgw/hashmapdcyl.html)。

## 这份复盘为什么有用

“不会 HashMap”太笼统，无法安排下一步。“不会说明容量和插入路径”是可以查证、实验和再次提问的缺口。复盘不必长，但至少留下一个错误、一处依据和一个待完成动作。

目前这里只演示记录方法，没有宣称上述待办实验已完成。把自己的回答、版本和证据填入[项目简历与复盘模板](https://qiuzhiwang.vip/resources/)，再安排下一次复述。

<FollowPanel topic="java" />
