HashMap怎麼和面試官講清楚?

2021-10-06 16:48:57 字數 1183 閱讀 6700

集合中我們經常使用的就是hashmap,我們知道它的底層實現是hash桶外加鍊錶的方式來進行儲存資料的,但是底層又是如何進行具體實現的,我們可能真的說不清除。現在我們從原始碼層次上進行講解hashmap的原理;

get方法的底層實現

先看下原始碼

我們傳入key的引數,底層呼叫的是getnode的方式,其中最重要的就是對我們傳入的key進行了hash演算法的處理,那麼hash演算法又是如何實現的哪,繼續原始碼刨析

首先判斷了key是否為空,空的話返回0;非空的話使用key的hashcode的高16位和低16位做異或運算;那麼為什末要這樣設計哪?這樣更容易保留目標值的資訊 減少碰撞。

再看getnode是如何獲取結點資訊的

經過hash演算法得到的hash值在hash桶裡面與(length-1)進行相與處理得到k值所在的桶,裡面的if判斷語句,如果頭節點的key和所要查詢的key一樣的話就返回頭節點,如果不相等的話,判斷頭節點的next結點,是否是treenode的結點,是的話按照treenode的查詢方式進行查詢,如果不是的話是按照鍊錶的方式進行查詢結點;

hashmap的核心擴容機制

主要的兩個方法就是resize和rehash方法,hashmap預設的初始容量是16,初始的負載因子是0.75f原始碼如下

負載因子的概念:當陣列的容量被使用75%以上的時候就會進行擴容;

為什末每次hashmap擴容時是乘2

主要是在取模的時候做優化,cap %16 = cap & 15 因為取模的運算是比較耗時的,而按位與運算效率是很高的,

比如cap=32時,cap%16 =0 ,cap & 15 = 0 相同的結果 後者的運算速度更快

hashmap的執行緒安全問題?

hashmap是執行緒不安全的,我們通過原始碼可以看出來,它的put操作沒有使用synchroized進行同步處理的

吊打面試官 hashMap

hashmap 知識點 hashmap是什麼?hashmap是用來儲存key value鍵值對的集合類 它具有儲存效率高,查詢速度快的特點。hashmap的底層實現原理是什麼?hashmap底層是基於 陣列 鍊錶 紅黑樹 結構來實現的,陣列元素採用node節點來儲存key value鍵值對的資訊。h...

吊打面試官之HashMap

hashmap的底層資料結構是什麼?jdk1.7和jdk1.7前使用的是陣列,鍊錶 jdk1.8和jdk1.8後使用的是陣列,鍊錶,紅黑樹 hashmap的put方法流程是怎麼樣的?1.先獲取key的hash值 注意 通過key獲取hash值,直接獲取hash值就可以了,但是這裡把key的hash值...

如何向面試官講清楚程式編譯過程

原始檔到產生效果是個很複雜的過程 大體步驟分為編譯和鏈結 你如果只是背,這四點千萬不要忽略 預處理 也稱預編譯,preprocessing 編譯 compilation 彙編 assembly 和鏈結 linking 首先是個大的過程,編譯。編譯分為預編譯和編譯加彙編 預處理過程中,對源 檔案中的檔...