1. 程式人生 > >JAVA筆記 —— JDK1.8中 HashMap 的變化

JAVA筆記 —— JDK1.8中 HashMap 的變化

HashMap(1.8)

1、資料結構的變化:紅黑樹

  JDK1.8之前,HashMap的資料結構:陣列 + 連結串列(單鏈表)

  JDK1.8之後,HashMap的資料結構:陣列 + 連結串列 + 紅黑樹

  JDK1.8之前,HashMap採用陣列+連結串列實現,即使用連結串列處理衝突,同一hash值的連結串列都儲存在一個連結串列裡。但是當位於一個桶中的元素較多,即hash值相等的元素較多時,通過key值依次查詢的效率較低。

  JDK1.8中,HashMap採用陣列+連結串列+紅黑樹實現,當連結串列長度超過閾值(8)時,將連結串列轉換為紅黑樹,這樣大大減少了查詢時間。

先來說下一紅黑樹的定義:

紅黑樹(Red Black Tree) 是一種自平衡二叉查詢樹,是在計算機科學中用到的一種資料結構,典型的用途是實現關聯陣列

  • 任何一個節點都是有顏色的,黑色或者紅色

  • 根節點是黑色的

  • 父子結點之間不能出現兩個連續的紅色節點

  • 任何一個節點向下遍歷到其子孫的葉子節點,所經歷的黑色結點個數必須相等

  • 空節點被認為是黑色的

紅黑樹是每個節點都帶有顏色屬性的二叉查詢樹,顏色或紅色或黑色。在二叉查詢樹強制一般要求以外,對於任何有效的紅黑樹我們增加了如下的額外要求:

性質1. 節點是紅色或黑色。

性質2. 根節點是黑色。

性質3 每個葉節點(NIL節點,空節點)是黑色的。

性質4 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)

性質5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

2、table陣列的型別,由Entry改成了Node

3、hash()函式演算法修改