Java筆記4:Map接口

Map接口

    Map用於保存鍵值對(key-value),其中key不允許重複。Map接口的繼承樹如下:
map
可以看到,Map的子類層次與Set很像,Set接口下有HashSetLinkedHashSetSorterdSetTreeSetEnumSet;相應的,Map接口下有HashMapLinkedHashMapSortedMapTreeMapEnumMapMap的這些實現類中key集的存儲形式和對應的Set中的元素的存儲形式完全相同。

實際上,從源碼看,Java是先實現了Map,然後通過包裝一個所有value都爲一個空對象的Map就實現了Set

Java8改進的HashMap和Hashtable實現類

  • 兩個實現類的區別:

    • Hashtable是一個古老的實現類,雖然線程安全,但是性能較低;相對的,HashMap線程不安全,但是性能較高
    • Hashtable不允許使用null作爲key和value,而HashMap中key和value都可以爲null
  • key對象的比較:兩個實現類判斷key相等的標準是,兩個key通過equals()方法比較返回true,兩個key的哈希值也相等。即只要兩個key對象equals()返回fasle或者兩個對象的哈希值不同,那麼這兩個對象就能同時保存在同一個HashMap中(Hashtable也一樣)

所以在使用可變對象作爲key時要十分謹慎,因爲如果在存入Map後再修改key對象可能導致其哈希值的改變,從而HashMap無法準確訪問到該key

LinkedHashMap實現類

  • 使用雙向鏈表維護了鍵值對的次序,則迭代順序與鍵值對的插入順序一致
  • 迭代訪問時性能較好

SortedMap接口和TreeMap實現類

  • 基本可以參照SortedSet接口和TreeSet實現類

WeakHashMap

    WeakHashMapHashMap基本相似,區別在與HashMap對於key保存的是強引用,而WeakHashMap對key保留的只是弱引用。這就意味着只要HashMap對象不被銷燬,其中所有的key所引用的對象也不會被垃圾回收;而在WeakHashMap中的key所引用的對象如果沒有被其他強引用變量所引用,就有可能被垃圾回收,WeakHashMap也會自動刪除對應的鍵值對。強弱引用可參考{% post_link jvm2-gc %}

IdentityHashMap實現類

    IdentityHashMapHashMap基本相似,區別在於只有當key1==key2時,IdentityHashMap才認爲兩個key是相等的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章