HashMap裏的Node

一。

HashMap類中的Node<K,V>類裏有一個Node<K,V> next。那以Node<K,V>.next.next.next這種結構形式存儲元素就是所說的鏈表,而Node<K,V>[ ] tab就是數組,tab所存儲元素爲每個鏈表的第一個元素。

每個數組的位置就是一個哈希值,如果兩個值哈希值一樣,就會佔用一個位置,他們就成了一個鏈表

Java8優化了這個地方,如果相同哈希值,鏈表的長度超過8,就從鏈表轉換成紅黑樹

Node類是HashMap的一個靜態內部類,實現了 Map.Entry<K,V>接口。在調用put方法創建一個新的鍵值對時,會調用newNode方法來創建Node對象

二、數據結構
  HashMap內部結構是數組(Node[] table)和鏈表結合組成的複合結構,數組被分成一個個桶(bucket),通過哈希值決定鍵值對在這個數組的尋址;哈希值相同的鍵值對,則以鏈表形式存儲。需注意的是:鏈表大小超過閾值(TREEIFY_THRESHOLD = 8)時,鏈表就會被改造成樹形結構。 下面示意圖爲一個簡單的HashMap示意圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章