Java 集合系列09之 Map架構

 

概要

前面,咱們已經系統的對List進行了學習。接下來,咱們先學習Map,而後再學習Set;由於Set的實現類都是基於Map來實現的(如,HashSet是經過HashMap實現的,TreeSet是經過TreeMap實現的)。html

首先,咱們看看Map架構。編程

如上圖:
(01) Map 是映射接口,Map中存儲的內容是鍵值對(key-value)
(02) AbstractMap 是繼承於Map的抽象類,它實現了Map中的大部分API。其它Map的實現類能夠經過繼承AbstractMap來減小重複編碼。
(03) SortedMap 是繼承於Map的接口。SortedMap中的內容是排序的鍵值對,排序的方法是經過比較器(Comparator)。
(04) NavigableMap 是繼承於SortedMap的接口。相比於SortedMap,NavigableMap有一系列的導航方法;如"獲取大於/等於某對象的鍵值對"、「獲取小於/等於某對象的鍵值對」等等。
(05) TreeMap 繼承於AbstractMap,且實現了NavigableMap接口;所以,TreeMap中的內容是「有序的鍵值對」!
(06) HashMap 繼承於AbstractMap,但沒實現NavigableMap接口;所以,HashMap的內容是「鍵值對,但不保證次序」!
(07) Hashtable 雖然不是繼承於AbstractMap,但它繼承於Dictionary(Dictionary也是鍵值對的接口),並且也實現Map接口;所以,Hashtable的內容也是「鍵值對,也不保證次序」。但和HashMap相比,Hashtable是線程安全的,並且它支持經過Enumeration去遍歷。
(08) WeakHashMap 繼承於AbstractMap。它和HashMap的鍵類型不一樣,WeakHashMap的鍵是「弱鍵」安全

 

在對各個實現類進行詳細以前,先來看看各個接口和抽象類的大體介紹。內容包括:
1 Map
2 Map.Entry
3 AbstractMap
4 SortedMap
5 NavigableMap
6 Dictionary
架構

轉載請註明出處:http://www.cnblogs.com/skywang12345/p/3308931.html函數

 

1 Map

Map的定義以下:學習

public interface Map<K,V> { }

Map 是一個鍵值對(key-value)映射接口。Map映射中不能包含重複的鍵;每一個鍵最多隻能映射到一個值
Map 接口提供三種collection 視圖,容許以鍵集值集鍵-值映射關係集的形式查看某個映射的內容。
Map 映射順序。有些實現類,能夠明確保證其順序,如 TreeMap;另外一些映射實現則不保證順序,如 HashMap 類。
Map 的實現類應該提供2個「標準的」構造方法:第一個,void(無參數)構造方法,用於建立空映射第二個,帶有單個 Map 類型參數的構造方法,用於建立一個與其參數具備相同鍵-值映射關係的新映射。實際上,後一個構造方法容許用戶複製任意映射,生成所需類的一個等價映射。儘管沒法強制執行此建議(由於接口不能包含構造方法),可是 JDK 中全部通用的映射實現都聽從它。編碼


Map的APIspa

abstract void                 clear()
abstract boolean              containsKey(Object key)
abstract boolean              containsValue(Object value)
abstract Set<Entry<K, V>>     entrySet()
abstract boolean              equals(Object object)
abstract V                    get(Object key)
abstract int                  hashCode()
abstract boolean              isEmpty()
abstract Set<K>               keySet()
abstract V                    put(K key, V value)
abstract void                 putAll(Map<? extends K, ? extends V> map)
abstract V                    remove(Object key)
abstract int                  size()
abstract Collection<V>        values()

說明
(01) Map提供接口分別用於返回 鍵集、值集或鍵-值映射關係集。
        entrySet()用於返回鍵-值集Set集合
        keySet()用於返回鍵集Set集合
       values()用戶返回值集Collection集合
       由於Map中不能包含重複的鍵;每一個鍵最多隻能映射到一個值。因此,鍵-值集、鍵集都是Set,值集時Collection線程

(02) Map提供了「鍵-值對」、「根據鍵獲取值」、「刪除鍵」、「獲取容量大小」等方法。code

 

2 Map.Entry

Map.Entry的定義以下:

interface Entry<K,V> { }

Map.Entry是Map中內部的一個接口,Map.Entry是鍵值對,Map經過 entrySet() 獲取Map.Entry的鍵值對集合,從而經過該集合實現對鍵值對的操做。

Map.Entry的API

abstract boolean     equals(Object object)
abstract K             getKey()
abstract V             getValue()
abstract int         hashCode()
abstract V             setValue(V object)

 

3 AbstractMap

AbstractMap的定義以下:

public abstract class AbstractMap<K,V> implements Map<K,V> {}

AbstractMap類提供 Map 接口的骨幹實現,以最大限度地減小實現此接口所需的工做。
要實現不可修改的映射,編程人員只需擴展此類並提供 entrySet 方法的實現便可,該方法將返回映射的映射關係 set 視圖。一般,返回的 set 將依次在 AbstractSet 上實現。此 set 不支持 add() 或 remove() 方法,其迭代器也不支持 remove() 方法。

要實現可修改的映射,編程人員必須另外重寫此類的 put 方法(不然將拋出 UnsupportedOperationException),entrySet().iterator() 返回的迭代器也必須另外實現其 remove 方法。

 

AbstractMap的API

abstract Set<Entry<K, V>>     entrySet()
         void                 clear()
         boolean              containsKey(Object key)
         boolean              containsValue(Object value)
         boolean              equals(Object object)
         V                    get(Object key)
         int                  hashCode()
         boolean              isEmpty()
         Set<K>               keySet()
         V                    put(K key, V value)
         void                 putAll(Map<? extends K, ? extends V> map)
         V                    remove(Object key)
         int                  size()
         String               toString()
         Collection<V>        values()
         Object               clone()

 

4 SortedMap

SortedMap的定義以下:

public interface SortedMap<K,V> extends Map<K,V> { }

SortedMap是一個繼承於Map接口的接口。它是一個有序的SortedMap鍵值映射。
SortedMap的排序方式有兩種:天然排序 或者 用戶指定比較器。 插入有序 SortedMap 的全部元素都必須實現 Comparable 接口(或者被指定的比較器所接受)。

另外,全部SortedMap 實現類都應該提供 4 個「標準」構造方法:
(01) void(無參數)構造方法,它建立一個空的有序映射,按照鍵的天然順序進行排序。
(02) 帶有一個 Comparator 類型參數的構造方法,它建立一個空的有序映射,根據指定的比較器進行排序。
(03) 帶有一個 Map 類型參數的構造方法,它建立一個新的有序映射,其鍵-值映射關係與參數相同,按照鍵的天然順序進行排序。
(04) 帶有一個 SortedMap 類型參數的構造方法,它建立一個新的有序映射,其鍵-值映射關係和排序方法與輸入的有序映射相同。沒法保證強制實施此建議,由於接口不能包含構造方法。

 

SortedMap的API

// 繼承於Map的API
abstract void                 clear()
abstract boolean              containsKey(Object key)
abstract boolean              containsValue(Object value)
abstract Set<Entry<K, V>>     entrySet()
abstract boolean              equals(Object object)
abstract V                    get(Object key)
abstract int                  hashCode()
abstract boolean              isEmpty()
abstract Set<K>               keySet()
abstract V                    put(K key, V value)
abstract void                 putAll(Map<? extends K, ? extends V> map)
abstract V                    remove(Object key)
abstract int                  size()
abstract Collection<V>        values()
// SortedMap新增的API 
abstract Comparator<? super K>     comparator()
abstract K                         firstKey()
abstract SortedMap<K, V>           headMap(K endKey)
abstract K                         lastKey()
abstract SortedMap<K, V>           subMap(K startKey, K endKey)
abstract SortedMap<K, V>           tailMap(K startKey)

 

5 NavigableMap

NavigableMap的定義以下:

public interface NavigableMap<K,V> extends SortedMap<K,V> { }

NavigableMap是繼承於SortedMap的接口。它是一個可導航的鍵-值對集合,具備了爲給定搜索目標報告最接近匹配項的導航方法。
NavigableMap分別提供了獲取「鍵」、「鍵-值對」、「鍵集」、「鍵-值對集」的相關方法。

 

NavigableMap的API

abstract Entry<K, V>             ceilingEntry(K key)
abstract Entry<K, V>             firstEntry()
abstract Entry<K, V>             floorEntry(K key)
abstract Entry<K, V>             higherEntry(K key)
abstract Entry<K, V>             lastEntry()
abstract Entry<K, V>             lowerEntry(K key)
abstract Entry<K, V>             pollFirstEntry()
abstract Entry<K, V>             pollLastEntry()
abstract K                       ceilingKey(K key)
abstract K                       floorKey(K key)
abstract K                       higherKey(K key)
abstract K                       lowerKey(K key)
abstract NavigableSet<K>         descendingKeySet()
abstract NavigableSet<K>         navigableKeySet()
abstract NavigableMap<K, V>      descendingMap()
abstract NavigableMap<K, V>      headMap(K toKey, boolean inclusive)
abstract SortedMap<K, V>         headMap(K toKey)
abstract SortedMap<K, V>         subMap(K fromKey, K toKey)
abstract NavigableMap<K, V>      subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
abstract SortedMap<K, V>         tailMap(K fromKey)
abstract NavigableMap<K, V>      tailMap(K fromKey, boolean inclusive)

說明

NavigableMap除了繼承SortedMap的特性外,它的提供的功能能夠分爲4類:
第1類,提供操做鍵-值對的方法。
               lowerEntry、floorEntry、ceilingEntry 和 higherEntry 方法,它們分別返回與小於、小於等於、大於等於、大於給定鍵的鍵關聯的 Map.Entry 對象。
               firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它們返回和/或移除最小和最大的映射關係(若是存在),不然返回 null。
第2類,提供操做鍵的方法。這個和第1類比較相似
               lowerKey、floorKey、ceilingKey 和 higherKey 方法,它們分別返回與小於、小於等於、大於等於、大於給定鍵的鍵。
第3類,獲取鍵集。
              navigableKeySet、descendingKeySet分別獲取正序/反序的鍵集。
第4類,獲取鍵-值對的子集。

 

6 Dictionary

Dictionary的定義以下:

public abstract class Dictionary<K,V> {}

NavigableMap是JDK 1.0定義的鍵值對的接口,它也包括了操做鍵值對的基本函數。


Dictionary的API

abstract Enumeration<V>     elements()
abstract V                  get(Object key)
abstract boolean            isEmpty()
abstract Enumeration<K>     keys()
abstract V                  put(K key, V value)
abstract V                  remove(Object key)
abstract int                size()
相關文章
相關標籤/搜索