hashmap的put方法
hashmap的结构是数组+链表的(jdk1.8)或者是数组+红黑树,在链表长度大于阈值8的时候(默认是8),会将链表转换为红黑树,在转换之前会判断一下当前的数组长度是否大于64,如果小于64,会将数组进行扩容而不进行将链表转换为红黑树。
1.判断当前的hashmap长度是否为零或者等于null,是就resize(),否则往下走
2.根据key找到数组的下标,找到该数组,看该位置是否等于null,是的话,直接插入,否的话,看key是否存在,是的话直接覆盖value,否的话看当前的数组是否是红黑树,是的话在红黑树中直接插入,否则他就是链表,遍历链表,看key是否存在于这个链表当中,若在,就覆盖value,若不在,就将key插入到链表的尾部(尾插法)。
3.最后判断 一下当前的 hashmap中的元素个数是否大于threshold( capacity * loadFactor ),如果大于的话,就进行扩容,默认是扩大为原来的2倍。