天天看點

HashMap在JDK1.7和1.8版本的差別HashMap在JDK1.7和1.8版本的差別

HashMap在JDK1.7和1.8版本的差別

JDK1.7

  1. 在JDK1.7中HashMap是以Entry數組來存儲資料。

    用key的hashcode取模來決定Key會被放在數組裡的位置

    如果hashcode相同,或者hashcode取模結果相同

    那麼這些Key會被定義到Entry數組的同一個格子裡,這些Key會形成一個連結清單。

JDK1.8

1.在JDK1.8中HashMap是以Node數組來存儲資料。

但是這個Node可能是連結清單結構,也可能是紅黑樹結構

但是如何插入的key和hashcode相同,也會被定義到node數組的格子裡

如果同一個格子裡的Key不超過8個,會用連結清單結構儲存

如果超過了8個,那麼會調用treefilBin函數,将連結清單轉換為紅黑樹

那麼即使hashcode相同,由于紅黑樹的特點查找某個特定元素,也隻需要O(log n)的開銷,也就是說get/put的操作時間複雜度最差也就隻有o(log n)