java集合之Map

來源:互聯網
上載者:User

標籤:

概要

前面,我們已經系統的對List進行了學習。接下來,我們先學習Map,然後再學習Set;因為Set的實作類別都是基於Map來實現的(如,HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的)。

首先,我們看看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的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()

說明
(01) Map提供介面分別用於返回 鍵集、值集或鍵-值對應關係集。
        entrySet()用於返回鍵-值集Set集合
        keySet()用於返回鍵集Set集合
        values()使用者返回值集Collection集合
       因為Map中不能包含重複的鍵;每個鍵最多隻能映射到一個值。所以,鍵-值集、鍵集都是Set,值集時Collection

(02) Map提供了“鍵-值對”、“根據鍵擷取值”、“刪除鍵”、“擷取容量大小”等方法。

 

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 介面的骨幹實現,以最大限度地減少實現此介面所需的工作
 

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的APIabstract 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() 

java集合之Map

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.