1. 程式人生 > >Java集合---HashMap(6)

Java集合---HashMap(6)

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

用途與特點  

儲存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時進行擴容。

擴容機制

擴容時機:是在加入資料時,(陣列長度16*0.75=12)大於12時進行擴容

擴充的新陣列長度是:  陣列長度16*0.75=12

是否執行緒安全,為什麼?

非執行緒安全,未對資料的新增、刪除、讀取等做鎖操作

參考:

30張圖帶你徹底理解紅黑樹

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

根據jdk1.8