HashMap擴容原理

worshipone發表於2024-05-16

在新增元素或初始化的時候需要呼叫resize方法進行擴容,第一次新增資料初始化陣列長度為16,以後每次每次擴容都是達到了擴容閾值(陣列長度*0.75)。
每次擴容的時候,都是擴容之前容量的2倍。
擴容之後,會新建立一個陣列,需要把老陣列中的資料挪動到新的陣列中。

  • 沒有hash衝突的節點,則直接使用e.hash&(newCap-1)計算新陣列的索引位置。
  • 如果是紅黑樹,走紅黑樹的新增。
  • 如果是連結串列,則需要遍歷連結串列,可能需要拆分連結串列,判斷e.hash&oldCap是否為0,該元素的位置要麼停留在原始位置,要麼移動到原始位置+增加的陣列大小這個位置上。

相關文章