2021-01-21:java中,HashMap的讀流程是什麼?

福哥答案2020-01-21:html

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值。node

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)
JDK1.8中的HashMap實現
評論源碼分析

相關文章
相關標籤/搜索