Map源碼跟蹤

HashMap數組

        HashMap其實就是內部列Entry類型的數組---Entry<K,V> table安全

在這裏看幾個問題 1HashMap如何存數據(包括如何自動擴容)  2 Map如何取出數據 3 如何刪除數據測試

1 put方法spa

   ①首先經過hash(Object key)生產hash值,而後indexFor()的位運算計算出value存放在數組的下標線程

  ②在新增元素以前先判斷集合中的元素及table數組中的元素是否達到了數組容量的0.75,若是達到就擴容,其中0.75能夠在實例化對象指定對象

 ③自動擴容建立一個新的長度的數組對象,而後把舊數組的元素一個一個的複製到新數組。rem

④數組內容複製get

⑤自動擴容以後就增長元素同步

2  get方法:根據key獲取數據hash

3  remove(Object key)

   

總結

       1 HashMap本質就是一個數組,經過hash(Object key)方法根據key來生成hash值,而後經過位運算運算出數組的下標,再經過下標實現數據的增刪改查。

        2 HashTable和HashMap的區別

          ①相同點:實現思路和代碼邏輯如出一轍

         不一樣點:

           ① HashTable的put方法、get方法等都使用synchronized關鍵字加入同步鎖保證線程安全

           ② 兩個自動擴容的方法名不同

           ③HashMap把增長元素的代碼封裝到一個方法,HashTable直接寫在put方法

注意點:

            關於hash值的生成

1 若是key是String類型的,則只有內容相同,無論是否同一個對象,則生成的hash值都是同樣的

2 若是key不是String類型,對象不同則hash值不一樣

測試代碼以下

 

 

相關文章
相關標籤/搜索