1、執行hash(Object key)得到hash值,再判斷table是否為空,為空表明這是第一個元素插入,則先resize,初次大小默認16。
2、若不需要初始化,則判斷要插入結點的位置是否為空,也就是沒有產生Hash地址沖突,是則直接放入table。
3、否則產生了沖突,那么有兩種情況:key相同,key不同。
4、如果p是TreeNode的實例,說明p下面是紅黑樹,需要在樹中找到一個合適的位置插入。
5、p下面的結點數未超過8,則以單向鏈表的形式存在,逐個往下判斷:①如果下一個位為空,插入,並且判斷當插入后容量超過8則轉化成紅黑樹,break。②如果下一個位有相等的hash值,則覆蓋,break。
6、判斷新插入這個值是否導致size已經超過了閾值,是則進行擴容。
java7:新值插入到鏈表的最前面,先(判斷)擴容后插入新值。
java8:新值插入到鏈表的最后面,先插值再(判斷)擴容。
https://www.cnblogs.com/jzb-blog/p/6637823.html
http://www.importnew.com/28263.html