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值不一樣
測試代碼以下