2021-01-21:java中,HashMap的讀流程是什麼?
福哥答案2020-01-21:
jdk1.7讀流程:
1.key是否為空值null,如果為空,直接遍歷table[0]連結串列,尋找key==null鍵。呼叫的是getForNullKey()方法。如下:
1.1.如果元素個數為0,直接返回null。
1.2.遍歷table[0]。
1.3.遍歷到了,返回值;沒遍歷到,返回null。
2.key不為空,獲取entry。呼叫getEntry方法。
2.1.如果元素個數為0,直接返回null。
2.2.計算hash。如果key為null,hash值是0;如果不為0,呼叫hash()方法。
2.3.計算索引位置。呼叫indexFor()方法。
2.4.遍歷table[索引]。雜湊相等,key相等(【==相等】或者【key不為空並且equals()相等】),這種情況就算找到了。
2.5.遍歷到了,返回值;沒遍歷到,返回null。
3.如果entry為空,返回空;如果entry不為空,返回entry的value值。
jdk1.8讀流程:
1.計算雜湊。呼叫hash()方法。
2.呼叫getNode()方法獲取node物件。
2.1.table陣列已經初始化,長度大於0,根據hash尋找table中的項也不為空。
2.2.table[索引]中的first元素的key相等,直接返回node;不相等,執行下一步驟2.3。
2.3.如果first元素的next節點存在,繼續下一步驟2.4。
2.4.如果first元素是TreeNode,呼叫getTreeNode()方法。
2.4.1.獲取root節點。
2.4.2.呼叫find方法,獲取TreeNode物件。
2.5.如果first元素不是TreeNode,遍歷連結串列。
3.如果node物件為空,直接返回null;如果不為空,返回e.value。
***
[HashMap原始碼分析(jdk7)](https://www.cnblogs.com/fsmly/p/11278561.html)
[JDK1.8中的HashMap實現](https://www.cnblogs.com/doufuyu/p/10874689.html)