1.根据key计算一个hash值。
2.在put的时候判断数组是否存在,如果不存在调用resize方法创建默认容量为16的数组。
3.确定node在数组中的位置,根据hash值和数组的最大索引值进行与运算得到索引的位置。
4.获取该位置是否有元素,如果没有元素,直接创建一个node放在该位置。
5.如果有元素,判断key是否完全相等,如果相同,把原来的node赋值给一个变量。
6.再去判断此位置是红黑树还是链表。
7.如果是红黑树,则以红黑树的方式将node放在红黑树上。
8.如果是链表,就遍历链表,把node放在最后一位,放完之后需要去判断链表的长度是否超过8,如果超过就需要判断是否将链表转换为红黑树,当数组容量小于64的时候,只会对数组进行扩容,如果数组容量大于64,才会进行链表转红黑树。
9.返回被覆盖的值。
10.判断整个数组是否需要扩容(是否达到75%---负载因子,最大值2^30)
如果HashMap在扩容时发现当前红黑树如果小于6才会转化为链表