HashMap面試問題整理

1.HashMap底層原理 數(shù)據(jù)結構
????底層使用哈希表(數(shù)組+鏈表進行存儲),在jdk1.8后 當鏈表長度大于等于8時 將鏈表轉為紅黑樹 ,時間復雜度由O(n)變?yōu)镺(logn)

2.HashMap的put過程

????(1)對key計算hash值 求下標

????(2)如果沒有發(fā)生hash碰撞,直接放入桶中

????(3)如果發(fā)生碰撞,放在鏈表的后面 并計算鏈表長度 大于8轉為紅黑樹

????(4)如果節(jié)點已經(jīng)存在進行覆蓋

????(5)如果長度大于(長度*負載因子0.75) 進行擴容resize

3.HashMap中的hash函數(shù)是怎么實現(xiàn)的

? ? (1)高16bit不變 低16bit和高16bit做了一個異或(^)

? ? (2)(n-1)&hash? 得到下標

4.擴容過程是什么樣的,原來某位置的元素,移動到了新數(shù)組,位置怎么確定

????(1)擴容為原來的2倍,對每個節(jié)點重新計算hash值

? ? (2)可能的位置是原來的位置 或者是(原下標+原容量)的位置

5.hash沖突還有那些解決辦法

? ? 開放定址法(線性探測) 鏈地址法?再哈希法

6.鏈表查找某個元素的時間復雜度是O(n),怎么優(yōu)化

? ? 單向鏈表 無法優(yōu)化 一種是hashMap實現(xiàn)的紅黑樹 另一種是可以通過雙向鏈表來實現(xiàn) 這樣就可以使用折半查找 但是因為要保存上一個元素的地址 更加耗費內(nèi)存空間

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • HashMap 是 Java 面試必考的知識點,面試官從這個小知識點就可以了解我們對 Java 基礎的掌握程度。網(wǎng)...
    野狗子嗷嗷嗷閱讀 6,817評論 9 107
  • 如果說Java的HashMap是數(shù)組+鏈表,那么JDK 8之后就是數(shù)組+鏈表+紅黑樹組成了HashMap。 在之前...
    Java_Explorer閱讀 1,036評論 1 5
  • 1種子,中心 2破殼,擴展 3生根,平衡 4子葉,預備 5真葉,表達 6生長,延伸 7強壯,解鎖 8茂盛,流動 9...
    霄空閱讀 2,886評論 0 0
  • 一般人看到《文學回憶錄》這樣氣勢磅礴的名字,總會認為此書一定會與巨作、名著扯上些許關系。殊不知,這部涵蓋5年聽課筆...
    楊藝瀚閱讀 373評論 0 1
  • 姓名:母光艷 公司:寧波貞觀電器 第235期,利他二組 【日精進打卡第126天】 【知-學習】 誦讀《六項精進》大...
    母光焱閱讀 125評論 0 0

友情鏈接更多精彩內(nèi)容