1. 程式人生 > 其它 >HashMap和HashTable的區別?底層實現是什麼?

HashMap和HashTable的區別?底層實現是什麼?

區別:

1.HashMap方法沒有synchronized修飾,所以是非執行緒安全的,HashTable是synchronized修飾,執行緒安全

2.HashMap允許key和value為null,而HashTable不允許。

HashMap底層實現:

jdk8之前是陣列加連結串列的形式,jdk8開始陣列+連結串列+紅黑樹。

jdk8開始,連結串列高度達到8,陣列長度超過64時,連結串列轉為紅黑樹,元素以內部類Node節點存在

插入元素:

(1)計算key的hash值,二次hash然後對陣列長度取模,對應到陣列的下標

(2)如果沒有產生hash衝突,直接建立Node存入陣列,如果產生hash衝突,先進行equals比較,相同的話覆蓋該元素,不相等,則判斷連結串列高度插入連結串列中,連結串列高度達到8,陣列長度超過64時,連結串列轉為紅黑樹,長度低於6則將紅黑樹轉回連結串列。

(3)key為null,直接存在下標0的位置

擴容機制

  HashMap預設初始容量為16,加權因子0.75,當元素達到閾值(初始容量*加權因子 = 12)時,進行擴容,預設是兩倍擴容。