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