這裏我採用的分析方式是帖子博客加上本身翻看jdk源碼。有些狀況下寫一些測試的算法小例子加深印象。我這裏只描述一下本身的總結想法 html
上一篇文章咱們研究了set接口下的幾個容器,因爲其Set集合設計時底層的數據模型是Map,Set的實現是基於Map的、因此先搞懂Map、才能去理解Set、不然的話、直接去弄Set會以爲雲裏霧裏、最後發現是浪費時間。這一節介紹關於Map的相關接口、抽象類的功能。java
1、Map集合結構體系圖(網絡圖,侵刪)算法
這篇文章主要對TreeMap,HashMap和LinkedHashMap作分析,其餘不經常使用的先不進行分析,另外針對HashTable和ConcurrentHashMap這兩個線程安全的Map着重開一章去整理數組
2、源碼分析 安全
一、HashMap源碼分析網絡
上帖子:http://www.cnblogs.com/chengxiao/p/6059914.html數據結構
總結:源碼分析
(1)首先重點了解一下哈希表的數據結構,測試
哈希表(散列)主要利用數組和鏈表的方式。利用這種方式就能夠避免單個數組出現的修改刪除的高時間複雜度,又避免了聊表查詢的高時間複雜度,具體實現方式請參看上邊的博客,具體的講解了目前的主要數據結構以及哈希表結構.net
(2)知道了哈希表的數據結構,就能理解HashMap的存儲方式了,HashMap就是利用數組+鏈表的方式進行數據存儲。博客中也對主要的添加,刪除,修改方法進行了源碼詳解。在看源碼的過程當中注意細節
二、LinkedHashMap源碼分析
發佈一個描述LinkedHashMap的博客:http://www.cnblogs.com/chenpi/p/5294077.html
三、TreeMap源碼分析
發佈一個描述TreeMap的博客:http://www.cnblogs.com/wzyxidian/p/5204879.html
3、區別對比
一、相同點
二、不一樣點
4、總結
三種類型分別在何時使用
一、通常狀況下,咱們用的最多的是HashMap。HashMap裏面存入的鍵值對在取出的時候是隨機的,它根據鍵的HashCode值存儲數據,根據鍵能夠直接獲取它的值,具備很快的訪問速度。在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。
二、TreeMap取出來的是排序後的鍵值對。但若是您要按天然順序或自定義順序遍歷鍵,那麼TreeMap會更好。
三、LinkedHashMap 是HashMap的一個子類,若是須要輸出的順序和輸入的相同,那麼用LinkedHashMap能夠實現,它還能夠按讀取順序來排列,像鏈接池中能夠應用。