- 首先判断键值对数组是否还有空间,如果没有空间的话需要进行resize扩容。
- 然后根据key的值计算出key所要插入的位置,如果该位置已经有元素,判断已有元素的key和将要插入的key的hash是否相同,若相同则直接覆盖。
- 若hash不同,首先判断hashMap底层是否位红黑树,如果为红黑树,则直接插入;
- 若不为红黑树,则计算链表的长度,判断长度是否大于8,若大于8,就将链表转为红黑树并进行插入;否则进行链表的插入操作;
- 插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容