HashMap數據結構與實現原理解析(乾貨)

HashMap 數據結構解析:算法

  • HashMap內部使用hash表(本質是一個數組見圖一)數組

  • HashMap使用hash算法計算獲得存放的索引位置,一次來加快查詢速度,(比ArrayList還要快)數據結構

  • 一樣的既然本質是數組則少不了擴容和複製數據的問題了,這與ArrayList的缺點是同樣的
  • hash值相同不能表示key徹底相同,須要調用equals再次確認blog

  • 若是key的hash值相同可是equals判斷不相同,那麼使用樹結構或者鏈表來存儲這些hash相同的元素,(具體使用哪一種根據當前map中元素的數量,超過64個元素則使用樹結構)索引

image-20191126123312490

獲取元素方法:

image-20191126123117994

存儲元素方法:

image-20191126134535014

存儲元素方法補充:

代碼在putVal方法的最後,當添加元素後的大小超過閾值時則直接擴容hash表hash

image-20191126135920717

擴容/轉換方法:

image-20191126130936107

總結:List

  • HashMap是使用Hash表(本質是數組)來存儲數據,map

  • 當數據Hash值相同可是equals判斷不一樣時使用鏈表(添加快,查詢慢)方法

  • 當元素數量超過64時則將鏈表轉爲數結構(添加慢,查詢快)im

相關文章
相關標籤/搜索