jdk1.8hashmap常見的面試問題


1.HashMap原理,內部數據結構?

底層使用哈希表(數組加鏈表)來存儲,鏈表過長會將鏈表轉成紅黑樹,以實現在O(logn)時間復雜度內查找

2.講一下HashMap中的put方法過程?

對key求哈希值然后計算下標
如果沒有哈希碰撞則直接放入槽中
如果碰撞了以鏈表的形式鏈接到后面
如果鏈表長度超過閾值(默認閾值是8),就把鏈表轉成紅黑樹
如果節點已存在就替換舊值
如果槽滿了(容量*加載因子),就需要resize

3.HashMap中哈希函數是怎么實現的?還有哪些hash實現方式?

高16bit不變,低16bit和高16bit做異或
(n-1)&hash獲得下標
還有哪些哈希實現方式?(查資料和博客)

4.HashMap如何解決沖突,講一下擴容過程。如果一個值在原數組中,擴容后移動到了新數組,位置肯定改變了,如何定位到這個值在新數組中的位置?

將節點加到鏈表后
容量擴充為原來的兩倍,然后對每個節點重新計算哈希值
這個值只可能在兩個地方:一種是在原下標位置,另一種是在下標為<原下標+原容量>的位置

5.拋開HashMap,哈希沖突有哪些解決方法?

開放地址法,鏈地址法

6.針對HashMap中某個Entry鏈太長,查找的時間復雜度可能達到O(n),如何優化?

將鏈表轉為紅黑樹,JDK1.8已經實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM