java 集合框架(十六)Map

一.概述

  Map是一個包含鍵值對的集合,一個map不能有重複的鍵(key),並且每一個鍵至多隻能對應一個值.Map同Collection同樣,它的全部通用實現都會提供一個轉換器構造函數,接收一個Map類型集合,並以此初始化本身,這樣只要是Map的實現均可以相互之間轉換.數組

  和List與Set同樣,Map強化了equal和hashCode以能對兩個Map對象實現邏輯上的比較.若是兩個Map實例有相同的鍵值對,那麼它們是相等的.緩存

 

  Map的集合視角方法使Map能夠像Collection同樣進行操做元素安全

  • KeySet--返回Map集合中鍵的Set集合
  • Values--返回Map集合中值的Collection集合
  • entrySet--返回Map集合中鍵值對對象的Set集合.在Map中提供了一個小的嵌套接口Map.Entry,它就是Map的鍵值對對象.

  Map沒有實現Iterable接口,因此集合視角是Map集合遍歷的惟一手段,而且每次獲取Map集合視角的時候,返回的是相同的對象.集合視角支持removal類型操做,可是任何狀況下都不支持addition,對集合視角的removal操做會影響到Map集合自己,好比map.keySet().clear()將會清空map,反之亦然,這和Set,List的視圖同樣.數據結構

  使用集合視角有一些有意思的用法,好比判斷一個Map是不是另外一個Map的子集併發

    if (m1.entrySet().containsAll(m2.entrySet())) {}函數

  相似,也能夠判斷兩個Map的是否擁有相同的鍵高併發

    if (m1.keySet().equals(m2.keySet())) {}性能

三.子接口

  Map和Set接口從形式上有些相似,類比與SortedSet和NavigableSet,Map也有SortedMap和NavigableMap兩個接口,實際上Set的實現底層就是使用的Map存儲數據.spa

  SortedMap將元素的鍵以天然排序,或者依照給定的排序器來進行排序,同SortedSet,SortedMap提供瞭如下幾種操做.3d

  • 視圖--容許從SortedMap截取並返回任意範圍的元素視圖
  • 端點操做---能夠直接獲取集合頭或尾的元素
  • 排序器---返回用於排列元素的排序器

  Map集合並沒有法直接實現遍歷,而是經過它的集合視角遍歷元素,因此SortedMap在返回的集合視角中,集合視角的迭代器也將會按SortedMap的順序進行排序,同理的SortedMap中toArray方法返回的數組也是如此,toString方法會返回一個包含全部元素,並排序好的字符串.

 四.實現

  Map的實現能夠分紅通用實現,專用實現,併發實現

  通用實現有三個,HashMap,TreeMap和LinkedHashMap.若是咱們想要對元素進行一些排序操做,那麼應當使用TreeMap,若是咱們想要最好的性能而不在意是否排序,應當使用HashMap,若是須要和HashMap接近的性能,而且能夠以插入順序遍歷,那麼應當使用LinkedHashMap.這和Set的通用實現很相似.

  此外LinkedHashMap不只提供了插入排序(insert order),同時還提供訪問排序(access order),這樣LinkedHashMap很是適用作本地緩存類(LRU)

  專用實現也有三個,分別是Enummap,WeakHashMap和IdentityHashMap.

  EnumMap是一個高性能的以枚舉爲鍵的Map集合,它內部是以數組實現.EnumMap將Map集合的豐富功能和安全性與數組的快速訪問結合起來,若是想要實現一個用枚舉映射值得結構,應當使用EnumMap.

  WeakHashMap只存儲弱引用類型的key,當它內部的元素的鍵再也不被外界引用時,其鍵值對就能夠被垃圾回收期(GC)回收,被從WeakHashMap中移除.WeakHashMap提供最簡單利用弱引用的方法,這對實現」registry-like」數據結構很是有用.

  IdentityHashMap存儲元素時,不使用equal方法比較鍵對象,而是使用==來對比,適用於實現對象拓撲結構轉換,好比對象序列化或深度拷貝時,做爲一個」節點表」來跟蹤處理那些已經處理過的對象引用.

  Java.util.concurrent包含ConcurrentMap接口,它繼承自Map,其putIfAbsent,remove,和replace方法是原子性的.ConcurrentHashMap是它的實現.

  ConcurrentHashMap是一個高併發高性能的基於哈希表的實現,當檢索元素時永不會阻塞,而且當執行update容許客戶端選定執行併發級別更新.它是HashMap的替代,ConcurrentHashMap除了實現ConcurrentMap還支持HashTable全部遺留的獨有的操做.

相關文章
相關標籤/搜索