Java集合---HashMap(6)
阿新 • • 發佈:2019-03-03
用途與特點
儲存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
是否執行緒安全,為什麼?
非執行緒安全,未對資料的新增、刪除、讀取等做鎖操作
參考:
二叉樹是自頂向下生長
紅黑樹是自底向上生長
根據jdk1.8