📚 分类
集合
🕵🏽‍♀️ 问题描述
hashMap源码分析-扩容
👨‍🏫 问题讲解
❒ 在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度 * 0.75)

❒ 每次扩容的时候,都是扩容之前容量的2倍;

❒ 扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中

  ✔ 没有hash冲突的节点,则直接使用e.hash &(newCap - 1)计算新数组的索引位置
  ✔ 如果是红黑树,走红黑树的添加
  ✔ 如果是链表,则需要遍历链表,可能需要拆分链表,判断(e.hash & oldCap)是否为0,该元素的位置要么停留在原始位置,要么移动到原始位置 + 增加的数组大小这个位置上
🏳️‍🌈 问题总结
❒ 链表长度 > 8,数组大小 >= 64的时候链表才会进化成红黑树

✔ 如果链表长度超过了长度阈值(TREEIFY_THRESHOLD) 8。
✔ 如果数组大小等于16,小于最小树化容量(MIN_TREEIFY_CAPACITY)64。

在这种情况下,即使链表长度超过了8,由于总容量小于64,链表不会转为红黑树,而是会进行扩容操作。
📖 问题信息
📈 浏览次数:14 | 📅 更新时间:2025-12-01 22:02:09
📦 创建信息
🏷️ ID:91 | 📅 创建时间:2025-01-06 09:18:23