Java集合---HashMap(6)

用途與特色  算法

存儲Key—value形式數據,在JDK1.7時撞庫使用鏈表,在1.8中對HashMap撞庫狀況進行優化,使用鏈表與紅黑樹對撞庫進行優化數組

ps: 紅黑樹還沒整明白爲何會自動平衡,因此暫時略過講解,以後補充。安全

實現算法優化

HashMap的底層實現方式其實就是Node<K,V>[]數組實現,線程

  • Node<K,V>[] table存放具體數據
  • Set<Map.Entry<K,V>> entrySet存放keySet
  • size存放實際數據大小。

默認初始數組長度是16,默認擴展擴容是在數組長度16*0.75=12時進行擴容。blog

擴容機制get

擴容時機:是在加入數據時,(數組長度16*0.75=12)大於12時進行擴容源碼

擴充的新數組長度是:  數組長度16*0.75=12it

是否線程安全,爲何?table

非線程安全,未對數據的添加、刪除、讀取等作鎖操做

參考:

30張圖帶你完全理解紅黑樹

二叉樹是自頂向下生長
紅黑樹是自底向上生長

根據jdk1.8版本源碼解讀

相關文章
相關標籤/搜索