HashMap在JDK1.7和1.8版本的差別
JDK1.7
-
在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)