在添加元素或初始化的时候需要调用resize
方法进行扩容,第一次添加数据初始化数组长度为16
,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。
每次扩容的时候,都是扩容之前容量的2
倍。
扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。
- 没有hash冲突的节点,则直接使用
e.hash&(newCap-1)
计算新数组的索引位置。 - 如果是红黑树,走红黑树的添加。
- 如果是链表,则需要遍历链表,可能需要拆分链表,判断
e.hash&oldCap
是否为0,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上。