首頁>技術>

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)

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 溫故知新:深入理解外掛化技術,安卓高階外掛化強化實戰-附原始碼