HashMap常見的面試題

2021-10-02 15:21:38 字數 858 閱讀 5913

1.hashmap底層是如何實現的?

首先底層資料結構是由陣列+鍊錶組成鍊錶雜湊。hashmap先得到key的雜湊值,在通過擾動函式(減少碰撞次數)得到hash值,接著通過hash & (n -1 ),n位table的長度,運算後得到陣列的索引值。如果當前節點存在元素,則通過比較hash值和key值是否相等,相等則替換,不相等則通過拉鍊法查詢元素,直到找到相等或者下個節點為null時。

1.8對擾動函式,擴容方法進行優化,並且增加了紅黑樹的資料結構。

2.hashmap 和 hashtable 的區別

執行緒安全: hashmap是執行緒不安全的,而hashtable是執行緒安全的,每個人方法通過修飾synchronized來控制線程安全。

效率: hashmap比hashtable效率高,原因在於hashtable的方法通過synchronized修飾後,併發的效率會降低。

允不允許null :hashmap執行只有乙個key為null,可以有多個null的value。而hashtable不允許key,value為null。

3.hashmap的長度為什麼是2的倍數

在hashmap的操作流程中,首先會對key進行hash演算法得到乙個索引值,這個索引值就是對應雜湊桶陣列的索引。為了得到這個索引值必須對擾動後的數跟陣列長度進行取餘運算。即 hash % n (n為hashmap的長度),又因為&比%運算快。n如果為2的倍數,就可以將%轉換為&,結果就是 hash & (n-1)。所以這就解釋了為什麼hashmap長度是2的倍數。

4.jdk1.8中滿足什麼條件後將鍊錶轉化成紅黑樹?

很顯然在putval方法中是判斷桶內的節點個數是否大於8,之後通過treeifybin方法中判斷長度是否大於最小紅黑樹容量64,小於則繼續擴容,大於則轉為紅黑樹。

HashMap常見面試題

1.你知道hashmap的工作原理嗎?你知道hashmap的get 方法的工作原理嗎?hashmap基於hashing原理,我們通過put 和get 方法儲存和獲取物件。當我們將鍵值對傳遞給put 方法時,它呼叫鍵物件的hashcode 方法來計算hashcode,讓後找到bucket位置來儲存en...

HashMap常見面試題

物件 key和value是否允許為空 是否執行緒安全 hashmap key和value都允許為null 否hashtable key和value都不允許為null 是concurrenthashmap key和value都不允許為null 是jdk1.7 超過擴容的閾值 發生碰撞 jdk1.8 超...

HashMap常見面試題整理

花了三天時間來仔細閱讀hashmap的原始碼,期間補了下不少資料結構的知識,刷了不少相關的面試題並進行了整理 1.談一下hashmap的特性?1.hashmap儲存鍵值對實現快速訪問,允許為null。key值不可重複,若key值重複則覆蓋。2.非同步,執行緒不安全。3.底層是hash表,不保證有序 ...