1,HashMap數組
hashmap數據結構爲一個hash表,具體的代碼實現就是一個數組,每一個數據裏面存放一個鏈表,初始化的時候默認的數組大小爲16,負載因子爲0.75(這個值能夠保證碰撞最低而且空間利用率最高),當元素的個數大於(負載因子*數組長度)的時候,會進行數組擴容,擴大爲2倍(因此當內存比較吃緊的時候,能夠適當地增長負載因子,當內存很充足的時候,能夠減小負載因子)。前面的敘述是針對jdk7及如下版本的,jdk8的hashmap稍稍作了一些改變,就是當數組中的鏈表達到必定的閾值的時候,這個鏈表會轉化成一顆紅黑樹,這個優點就很明顯了,在紅黑樹裏面查詢一個數據可比在鏈表中查詢效率高多了。安全
2,TreeMap數據結構
能夠說不管是添加操做,仍是查找操做,treeMap的效率都沒有hashMap高,由於在操做以前他們都是須要定位的,而hashMap只須要算出hash值就能夠找到相應的數組小標,從而定位到相應的位置,而treemap是須要從樹的頂端往下尋找,時間複雜度爲log(n),那這個treemap的價值是什麼呢?別忘了treemap實現了一個接口叫作SortedMap,也就說treemap是一個有序的map,當你須要按順序輸出一組數據的時候就能夠選擇treemap了。併發
treemap的內部數據結構是紅黑樹(R-B Tree),這顆樹比通常的查詢二叉樹的優點就是查詢這個樹的時間複雜度爲log(n),而通常普通的查詢二叉樹的查詢時間複雜度極可能爲O(n)(最次的狀況)。線程
3,WeakHashMap對象
WeakHashMap,從單詞的含義就能看出來,是弱hashmap,他的弱指的就是存入的對象引用的強度,咱們知道對象引用強度分四個級別:強引用 、軟引用、弱引用、虛引用,二這個弱指的就是弱引用。繼承
那麼WeakHashMap是怎麼實現這個弱引用的呢?首先在他的Entry內部類繼承了WeakReference類,而且在構造方法中調用了這個類的構造方法,super(key,queue),這個queue是WeakHashMap內部的一個referenceQueue,這個queue是專門存放弱引用對象的key的,當WeakHashMap調用expungeStaleEntries的時候,會將queue中存放的key的鍵值對從WeakHashMap中刪除掉接口
4,Hashtable內存
Hashtable跟hashmap的內部結構基本同樣也是hash表,就是一個數組,每一個數組裏面是一個鏈表,不一樣的大概有這麼幾點:hash
(1)初始的數組大小爲11,hashmap的初始數組大小爲16,
(2)hashtable是線程安全的,由於hashtable裏面的一些併發方法都是由synchronized修飾的