欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA Map架構(gòu)和API介紹

 更新時(shí)間:2013年11月05日 11:04:07   作者:  
JAVA Map架構(gòu)和API介紹:Map、Map.Entry、AbstractMap、SortedMap、 NavigableMap、Dictionary。

首先,我們看看Map架構(gòu)。

如上圖:
Map 是映射接口,Map中存儲(chǔ)的內(nèi)容是鍵值對(key-value)。
AbstractMap 是繼承于Map的抽象類,它實(shí)現(xiàn)了Map中的大部分API。其它Map的實(shí)現(xiàn)類可以通過繼承AbstractMap來減少重復(fù)編碼。
SortedMap 是繼承于Map的接口。SortedMap中的內(nèi)容是排序的鍵值對,排序的方法是通過比較器(Comparator)。
NavigableMap 是繼承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的導(dǎo)航方法;如"獲取大于/等于某對象的鍵值對"、“獲取小于/等于某對象的鍵值對”等等。
TreeMap 繼承于AbstractMap,且實(shí)現(xiàn)了NavigableMap接口;因此,TreeMap中的內(nèi)容是“有序的鍵值對”!
HashMap 繼承于AbstractMap,但沒實(shí)現(xiàn)NavigableMap接口;因此,HashMap的內(nèi)容是“鍵值對,但不保證次序”!
Hashtable 雖然不是繼承于AbstractMap,但它繼承于Dictionary(Dictionary也是鍵值對的接口),而且也實(shí)現(xiàn)Map接口;因此,Hashtable的內(nèi)容也是“鍵值對,也不保證次序”。但和HashMap相比,Hashtable是線程安全的,而且它支持通過Enumeration去遍歷。
WeakHashMap 繼承于AbstractMap。它和HashMap的鍵類型不同,WeakHashMap的鍵是“弱鍵”。

有了上面的總體框架之后,我們先來看看各個(gè)接口和抽象類的介紹;后面再對各個(gè)實(shí)現(xiàn)類進(jìn)行詳細(xì)說明。

1 Map
Map的定義如下:

復(fù)制代碼 代碼如下:

public interface Map<K,V> { }

Map 是一個(gè)鍵值對(key-value)映射接口。Map映射中不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。
Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關(guān)系集的形式查看某個(gè)映射的內(nèi)容。
Map 映射順序。有些實(shí)現(xiàn)類,可以明確保證其順序,如 TreeMap;另一些映射實(shí)現(xiàn)則不保證順序,如 HashMap 類。
Map 的實(shí)現(xiàn)類應(yīng)該提供2個(gè)“標(biāo)準(zhǔn)的”構(gòu)造方法:第一個(gè),void(無參數(shù))構(gòu)造方法,用于創(chuàng)建空映射;第二個(gè),帶有單個(gè) Map 類型參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)與其參數(shù)具有相同鍵-值映射關(guān)系的新映射。實(shí)際上,后一個(gè)構(gòu)造方法允許用戶復(fù)制任意映射,生成所需類的一個(gè)等價(jià)映射。盡管無法強(qiáng)制執(zhí)行此建議(因?yàn)榻涌诓荒馨瑯?gòu)造方法),但是 JDK 中所有通用的映射實(shí)現(xiàn)都遵從它。

Map的API
復(fù)制代碼 代碼如下:

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提供接口分別用于返回 鍵集、值集或鍵-值映射關(guān)系集。
        entrySet()用于返回鍵-值集的Set集合
        keySet()用于返回鍵集的Set集合
       values()用戶返回值集的Collection集合
       因?yàn)镸ap中不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。所以,鍵-值集、鍵集都是Set,值集時(shí)Collection。
(02) Map提供了“鍵-值對”、“根據(jù)鍵獲取值”、“刪除鍵”、“獲取容量大小”等方法。

2 Map.Entry
Map.Entry的定義如下:

復(fù)制代碼 代碼如下:

interface Entry<K,V> { }

Map.Entry是Map中內(nèi)部的一個(gè)接口,Map.Entry是鍵值對,Map通過 entrySet() 獲取Map.Entry的鍵值對集合,從而通過該集合實(shí)現(xiàn)對鍵值對的操作。
Map.Entry的API
復(fù)制代碼 代碼如下:

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

3 AbstractMap
AbstractMap的定義如下:
復(fù)制代碼 代碼如下:

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

AbstractMap類提供 Map 接口的骨干實(shí)現(xiàn),以最大限度地減少實(shí)現(xiàn)此接口所需的工作。
要實(shí)現(xiàn)不可修改的映射,編程人員只需擴(kuò)展此類并提供 entrySet 方法的實(shí)現(xiàn)即可,該方法將返回映射的映射關(guān)系 set 視圖。通常,返回的 set 將依次在 AbstractSet 上實(shí)現(xiàn)。此 set 不支持 add() 或 remove() 方法,其迭代器也不支持 remove() 方法。
要實(shí)現(xiàn)可修改的映射,編程人員必須另外重寫此類的 put 方法(否則將拋出 UnsupportedOperationException),entrySet().iterator() 返回的迭代器也必須另外實(shí)現(xiàn)其 remove 方法。
AbstractMap的API
復(fù)制代碼 代碼如下:

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的定義如下:
復(fù)制代碼 代碼如下:

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

SortedMap是一個(gè)繼承于Map接口的接口。它是一個(gè)有序的SortedMap鍵值映射。
SortedMap的排序方式有兩種:自然排序 或者 用戶指定比較器。 插入有序 SortedMap 的所有元素都必須實(shí)現(xiàn) Comparable 接口(或者被指定的比較器所接受)。
另外,所有SortedMap 實(shí)現(xiàn)類都應(yīng)該提供 4 個(gè)“標(biāo)準(zhǔn)”構(gòu)造方法:
(01) void(無參數(shù))構(gòu)造方法,它創(chuàng)建一個(gè)空的有序映射,按照鍵的自然順序進(jìn)行排序。
(02) 帶有一個(gè) Comparator 類型參數(shù)的構(gòu)造方法,它創(chuàng)建一個(gè)空的有序映射,根據(jù)指定的比較器進(jìn)行排序。
(03) 帶有一個(gè) Map 類型參數(shù)的構(gòu)造方法,它創(chuàng)建一個(gè)新的有序映射,其鍵-值映射關(guān)系與參數(shù)相同,按照鍵的自然順序進(jìn)行排序。
(04) 帶有一個(gè) SortedMap 類型參數(shù)的構(gòu)造方法,它創(chuàng)建一個(gè)新的有序映射,其鍵-值映射關(guān)系和排序方法與輸入的有序映射相同。無法保證強(qiáng)制實(shí)施此建議,因?yàn)榻涌诓荒馨瑯?gòu)造方法。

SortedMap的API
復(fù)制代碼 代碼如下:

// 繼承于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的接口。它是一個(gè)可導(dǎo)航的鍵-值對集合,具有了為給定搜索目標(biāo)報(bào)告最接近匹配項(xiàng)的導(dǎo)航方法。
NavigableMap分別提供了獲取“鍵”、“鍵-值對”、“鍵集”、“鍵-值對集”的相關(guān)方法。
NavigableMap的API
復(fù)制代碼 代碼如下:

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 方法,它們分別返回與小于、小于等于、大于等于、大于給定鍵的鍵關(guān)聯(lián)的 Map.Entry 對象。
               firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它們返回和/或移除最小和最大的映射關(guān)系(如果存在),否則返回 null。
第2類,提供操作鍵的方法。這個(gè)和第1類比較類似
               lowerKey、floorKey、ceilingKey 和 higherKey 方法,它們分別返回與小于、小于等于、大于等于、大于給定鍵的鍵。
第3類,獲取鍵集。
              navigableKeySet、descendingKeySet分別獲取正序/反序的鍵集。
第4類,獲取鍵-值對的子集。

6 Dictionary
Dictionary的定義如下:

復(fù)制代碼 代碼如下:

public abstract class Dictionary<K,V> {}

NavigableMap是JDK 1.0定義的鍵值對的接口,它也包括了操作鍵值對的基本函數(shù)。
Dictionary的API
復(fù)制代碼 代碼如下:

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 

相關(guān)文章

  • Java monitor機(jī)制使用方法解析

    Java monitor機(jī)制使用方法解析

    這篇文章主要介紹了Java monitor機(jī)制使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Idea 配置國內(nèi) Maven 源的圖文教程

    Idea 配置國內(nèi) Maven 源的圖文教程

    這篇文章主要介紹了Idea 配置國內(nèi) Maven 源的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • 解決IDEA無法下載maven依賴的問題

    解決IDEA無法下載maven依賴的問題

    這篇文章主要介紹了解決IDEA無法下載maven依賴的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java并發(fā)編程之對象的共享

    Java并發(fā)編程之對象的共享

    這篇文章主要介紹了Java并發(fā)編程之對象的共享,介紹如何共享和發(fā)布對象,使它們被安全地由多個(gè)進(jìn)程訪問。需要的小伙伴可以參考一下
    2022-04-04
  • Java concurrency集合之CopyOnWriteArraySet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency集合之CopyOnWriteArraySet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    CopyOnWriteArraySet基于CopyOnWriteArrayList實(shí)現(xiàn),其唯一的不同是在add時(shí)調(diào)用的是CopyOnWriteArrayList的addIfAbsent(若沒有則增加)方法
    2017-06-06
  • SpringBoot3和mybatis-plus整合出現(xiàn)的問題解決辦法

    SpringBoot3和mybatis-plus整合出現(xiàn)的問題解決辦法

    SpringBoot和MybatisPlus的整合可以讓我們更加方便地進(jìn)行數(shù)據(jù)庫操作,這篇文章主要給大家介紹了關(guān)于SpringBoot3和mybatisplus整合出現(xiàn)的一些問題的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之樹

    Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之樹

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之樹,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java數(shù)據(jù)結(jié)構(gòu)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java NIO三大組件與ByteBuffer深入理解及使用

    Java NIO三大組件與ByteBuffer深入理解及使用

    這篇文章主要介紹了Java NIO三大組件與ByteBuffer,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 使用feign客戶端傳參接收不到的問題及解決

    使用feign客戶端傳參接收不到的問題及解決

    這篇文章主要介紹了使用feign客戶端傳參接收不到的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。
    2022-03-03
  • 谷歌二維碼引擎com.google.zxing二維碼生成與解析

    谷歌二維碼引擎com.google.zxing二維碼生成與解析

    這篇文章主要給大家介紹了關(guān)于谷歌二維碼引擎com.google.zxing二維碼生成與解析的相關(guān)資料,zxing是google開源的二維碼生成和解析工具,需要的朋友可以參考下
    2023-07-07

最新評論