集合
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,链表不会转为红黑树,而是会进行扩容操作。