先看來下 Map 大家族:
話外音:圖中關係是 UML 類圖表示。
實線箭頭表示,繼承,從一個非接口類繼承。
虛線箭頭表示,實現實現一個接口。
1.HashMap(數組+鏈表+紅黑樹)
HashMap 根據鍵的 hashCode 值存儲數據,大多數情況下可以直接定位它的值,因而具有很快的訪問速度,但遍歷順序確實不確定的。
HashMap 最多隻允許一條記錄的鍵爲 null,允許多條記錄的值爲 null。
HashMap 非線程安全,即任任一時刻可以有多個線程同時寫 HashMap,可能會導致數據的不一致。
如果需要滿足線程安全,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有線程安全的能力,或者使用 ConcurrentHashMap。
我們用下面用下面這張圖來介紹 HashMap 的結構。
1.Java 7 實現
Java 7 HashMap 結構