JavaTM 2 Platform
Standard Ed. 6

java.util
類別 AbstractMap<K,V>

java.lang.Object
  繼承者 java.util.AbstractMap<K,V>
型別參數:
K - 此映射維護的鍵的型別
V - 映射值的型別
所有已實作的介面:
Map<K,V>
直接已知子類別:
ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, IdentityHashMap, TreeMap, WeakHashMap

public abstract class AbstractMap<K,V>
extends Object
implements Map<K,V>

此類別提供 Map 介面的骨幹實作,以最大限度地減少實作此介面所需的工作。

要實作不可修改的映射,程式人員只需擴展此類別並提供 entrySet 方法的實作即可,該方法將返回映射的映射關係 set 視圖。通常,返回的 set 將依次在 AbstractSet 上實作。此 set 不支持 addremove 方法,其迭代器也不支持 remove 方法。

要實作可修改的映射,程式人員必須另外覆寫此類別的 put 方法(否則將拋出 UnsupportedOperationException),entrySet().iterator() 返回的迭代器也必須另外實作其 remove 方法。

按照 Map 介面規範中的建議,程式人員通常應該提供一個 void(無參數)建構子和 map 建構子。

此類別中每個非抽象方法的文檔詳細描述了其實作。如果要實作的映射允許更有效的實作,則可以覆寫所有這些方法。

此類別是 Java Collections Framework 的成員。

從以下版本開始:
1.2
另請參見:
Map, Collection

巢狀類別摘要
static class AbstractMap.SimpleEntry<K,V>
          維護鍵和值的 Entry。
static class AbstractMap.SimpleImmutableEntry<K,V>
          維護不可變的鍵和值的 Entry。
 
從介面 java.util.Map 繼承的巢狀類別/介面
Map.Entry<K,V>
 
建構子摘要
protected AbstractMap()
          唯一的建構子。
 
方法摘要
 void clear()
          從此映射中移除所有映射關係(可選操作)。
protected  Object clone()
          返回此 AbstractMap 實例的淺表副本:不複製鍵和值本身。
 boolean containsKey(Object key)
          如果此映射包含指定鍵的映射關係,則返回 true
 boolean containsValue(Object value)
          如果此映射將一個或多個鍵映射到指定值,則返回 true
abstract  Set<Map.Entry<K,V>> entrySet()
          返回此映射中包含的映射關係的 Set 視圖。
 boolean equals(Object o)
          比較指定對象與此映射的相等性。
 V get(Object key)
          返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null
 int hashCode()
          返回此映射的雜湊碼值。
 boolean isEmpty()
          如果此映射未包含鍵-值映射關係,則返回 true
 Set<K> keySet()
          返回此映射中包含的鍵的 Set 視圖。
 V put(K key, V value)
          將指定的值與此映射中的指定鍵關聯(可選操作)。
 void putAll(Map<? extends K,? extends V> m)
          從指定映射中將所有映射關係複製到此映射中(可選操作)。
 V remove(Object key)
          如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。
 int size()
          返回此映射中的鍵-值映射關係數。
 String toString()
          返回此映射的字元串表示形式。
 Collection<V> values()
          返回此映射中包含的值的 Collection 視圖。
 
從類別 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

AbstractMap

protected AbstractMap()
唯一的建構子。(由子類別建構子調用,通常是隱式的。)

方法詳細資訊

size

public int size()
返回此映射中的鍵-值映射關係數。如果該映射包含的元素大於 Integer.MAX_VALUE,則返回 Integer.MAX_VALUE

此實作返回 entrySet().size()

指定者:
介面 Map<K,V> 中的 size
返回:
此映射中的鍵-值映射關係數

isEmpty

public boolean isEmpty()
如果此映射未包含鍵-值映射關係,則返回 true

此實作返回 size() == 0

指定者:
介面 Map<K,V> 中的 isEmpty
返回:
如果此映射未包含鍵-值映射關係,則返回 true

containsValue

public boolean containsValue(Object value)
如果此映射將一個或多個鍵映射到指定值,則返回 true。更確切地講,當且僅當此映射至少包含一個對滿足 (value==null ? v==null : value.equals(v)) 的值 v 的映射關係時,返回 true。對於大多數 Map 介面的實作而言,此操作需要的時間可能與映射大小呈線性關係。

此實作在 entrySet() 上進行迭代,以搜尋帶有指定值的條目。如果找到這樣的條目,則返回 true。如果迭代終止,並且沒有找到這樣的條目,則返回 false。注意,此實作所需的時間與映射的大小呈線性關係。

指定者:
介面 Map<K,V> 中的 containsValue
參數:
value - 測試是否存在於此映射中的值
返回:
如果此映射將一個或多個鍵映射到指定值,則返回 true
拋出:
ClassCastException - 如果該值對於此映射是不合適的型別(可選)
NullPointerException - 如果指定值為 null 並且此映射不允許 null 值(可選)

containsKey

public boolean containsKey(Object key)
如果此映射包含指定鍵的映射關係,則返回 true。更確切地講,當且僅當此映射包含針對滿足 (key==null ? k==null : key.equals(k)) 的鍵 k 的映射關係時,返回 true。(最多只能有一個這樣的映射關係)。

此實作在 entrySet() 上進行迭代,以搜尋帶有指定鍵的條目。如果找到這樣的條目,則返回 true。如果迭代終止,並且沒有找到這樣的條目,則返回 false。注意,此實作所需的時間與映射的大小呈線性關係;許多實作將覆寫此方法。

指定者:
介面 Map<K,V> 中的 containsKey
參數:
key - 測試是否存在於此映射中的鍵
返回:
如果此映射包含指定鍵的映射關係,則返回 true
拋出:
ClassCastException - 如果該鍵對於此映射是不合適的型別(可選)
NullPointerException - 如果指定鍵為 null 並且此映射不允許 null 鍵(可選)

get

public V get(Object key)
返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null

更確切地講,如果此映射包含滿足 (key==null ? k==null : key.equals(k)) 的鍵 k 到值 v 的映射關係,則此方法返回 v;否則返回 null。(最多只能有一個這樣的映射關係)。

如果此映射允許 null 值,則返回 null 值並不一定 表示該映射不包含該鍵的映射關係;也可能該映射將該鍵顯示地映射到 null。使用 containsKey 操作可區分這兩種情況。

此實作在 entrySet() 上進行迭代,以搜尋帶有指定鍵的條目。如果找到這樣的條目,則返回該條目的值。如果迭代終止,並且沒有找到這樣的條目,則返回 null。注意,此實作所需的時間與映射的大小呈線性關係;許多實作將覆寫此方法。

指定者:
介面 Map<K,V> 中的 get
參數:
key - 要返回其關聯值的鍵
返回:
指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null
拋出:
ClassCastException - 如果該鍵對於此映射是不合適的型別(可選)
NullPointerException - 如果指定鍵為 null 並且此映射不允許 null 鍵(可選)

put

public V put(K key,
             V value)
將指定的值與此映射中的指定鍵關聯(可選操作)。如果此映射以前包含一個該鍵的映射關係,則用指定值替換舊值(當且僅當 m.containsKey(k) 返回 true 時,才能說映射 m 套件含鍵 k 的映射關係)。

此實作始終拋出 UnsupportedOperationException

指定者:
介面 Map<K,V> 中的 put
參數:
key - 與指定值關聯的鍵
value - 與指定鍵關聯的值
返回:
以前與 key 關聯的值,如果沒有針對 key 的映射關係,則返回 null。(如果該實作支持 null 值,則返回 null 也可能表示此映射以前將 nullkey 關聯)。
拋出:
UnsupportedOperationException - 如果此映射不支持 put 操作
ClassCastException - 如果指定鍵或值的類別不允許將其存儲在此映射中
NullPointerException - 如果指定鍵或值為 null,並且此映射不允許 null 鍵或值
IllegalArgumentException - 如果指定鍵或值的某些屬性不允許將其存儲在此映射中

remove

public V remove(Object key)
如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。更確切地講,如果此映射包含從滿足 (key==null ? k==null :key.equals(k)) 的鍵 k 到值 v 的映射關係,則移除該映射關係。(該映射最多只能包含一個這樣的映射關係。)

返回此映射中以前關聯該鍵的值,如果此映射不包含該鍵的映射關係,則返回 null

如果此映射允許 null 值,則返回 null 值並不一定 表示該映射不包含該鍵的映射關係;也可能該映射將該鍵顯示地映射到 null

調用返回後,此映射將不再包含指定鍵的映射關係。

此實作在 entrySet() 上進行迭代,以搜尋帶有指定鍵的條目。如果找到這樣的條目,則通過 getValue 操作獲取該條目的值,然後使用迭代器的 remove 操作從 collection(以及底層實作映射)中移除該條目,並返回保存的值。如果迭代終止,並且沒有找到這樣的條目,則返回 null。注意,此實作所需的時間與映射大小呈線性關係;許多實作將覆寫此方法。

注意,如果 entrySet 迭代器不支持 remove 方法,並且此映射包含指定鍵的映射關係,則此實作將拋出 UnsupportedOperationException

指定者:
介面 Map<K,V> 中的 remove
參數:
key - 從映射中移除其映射關係的鍵
返回:
以前與 key 關聯的值;如果沒有 key 的映射關係,則返回 null
拋出:
UnsupportedOperationException - 如果此映射不支持 remove 操作
ClassCastException - 如果該鍵對於此映射是不合適的型別(可選)
NullPointerException - 如果指定鍵為 null 並且此映射不允許 null 鍵(可選)

putAll

public void putAll(Map<? extends K,? extends V> m)
從指定映射中將所有映射關係複製到此映射中(可選操作)。對於指定映射中的每個鍵 k 到值 v 的映射關係,此調用等效於對此映射調用一次 put(k, v)。如果正在進行此操作的同時修改了指定的映射,則此操作的行為是不確定的。

此實作在指定映射的 entrySet() collection 上進行迭代,並對迭代返回的每個條目調用一次此映射的 put 操作。

注意,如果此映射不支持 put 操作,並且指定映射為非空(null),則此實作將拋出 UnsupportedOperationException

指定者:
介面 Map<K,V> 中的 putAll
參數:
m - 要存儲在此映射中的映射關係
拋出:
UnsupportedOperationException - 如果此映射不支持 putAll 操作
ClassCastException - 如果指定映射中的鍵或值的類別不允許將其存儲在此映射中
NullPointerException - 如果指定映射為 null,或者此映射不允許 null 鍵或值,並且指定的映射包含 null 鍵或值
IllegalArgumentException - 如果指定映射中的鍵或值的某些屬性不允許將其存儲在此映射中

clear

public void clear()
從此映射中移除所有映射關係(可選操作)。此調用返回後,該映射將為空。

此實作調用 entrySet().clear()

注意,如果 entrySet 不支持 clear 操作,則此實作將拋出 UnsupportedOperationException

指定者:
介面 Map<K,V> 中的 clear
拋出:
UnsupportedOperationException - 如果此映射不支持 clear 操作

keySet

public Set<K> keySet()
返回此映射中包含的鍵的 Set 視圖。該 set 受映射支持,所以對映射的更改可在此 set 中反映出來,反之亦然。如果對該 set 進行迭代的同時修改了映射(通過迭代器自己的 remove 操作除外),則迭代結果是不確定的。set 支持元素移除,通過 Iterator.removeSet.removeremoveAllretainAllclear 操作可從映射中移除相應的映射關係。它不支持 addaddAll 操作。

此實作返回一個子類別化 AbstractSet 的 set。子類別的 iterator 方法通過此映射的 entrySet() 迭代器返回一個「外覆器物件」。size 方法委託給此映射的 size 方法,contains 方法委託給此映射的 containsKey 方法。

set 是在第一次調用此方法時創建的,並為回應所有後續調用而返回。 因為不執行同步操作,所以對此方法的多個調用幾乎總是返回相同的 set。

指定者:
介面 Map<K,V> 中的 keySet
返回:
此映射中包含的鍵的 set 視圖

values

public Collection<V> values()
返回此映射中包含的值的 Collection 視圖。該 collection 受映射支持,所以對映射的更改可在此 collection 中反映出來,反之亦然。如果對該 collection 進行迭代的同時修改了映射(通過迭代器自己的 remove 操作除外),則迭代結果是不確定的。collection 支持元素移除,通過 Iterator.removeCollection.removeremoveAllretainAllclear 操作可從映射中移除相應的映射關係。它不支持 addaddAll 操作。

此實作返回一個子類別化 AbstractCollection 的 collection。子類別的 iterator 方法通過此映射的 entrySet() 迭代器返回一個「外覆器物件」。size 方法委託給此映射的 size 方法,contains 方法委託給此映射的 containsValue 方法。

collection 是在第一次調用此方法時創建的,並為回應所有後續調用而返回。因為不執行同步操作,所以對此方法的多個調用幾乎總是返回相同的 collection。

指定者:
介面 Map<K,V> 中的 values
返回:
此映射中包含的值的 collection 視圖

entrySet

public abstract Set<Map.Entry<K,V>> entrySet()
從介面 Map 複製的描述
返回此映射中包含的映射關係的 Set 視圖。該 set 受映射支持,所以對映射的更改可在此 set 中反映出來,反之亦然。如果對該 set 進行迭代的同時修改了映射(通過迭代器自己的 remove 操作,或者通過對迭代器返回的映射項執行 setValue 操作除外),則迭代結果是不確定的。set 支持元素移除,通過 Iterator.removeSet.removeremoveAllretainAllclear 操作可從映射中移除相應的映射關係。它不支持 addaddAll 操作。

指定者:
介面 Map<K,V> 中的 entrySet
返回:
此映射中包含的映射關係的 set 視圖

equals

public boolean equals(Object o)
比較指定對象與此映射的相等性。如果給定對象也是一個映射並且兩個映射表示相同的映射關係,則返回 true。更確切地講,如果 m1.entrySet().equals(m2.entrySet()),則兩個映射 m1m2 表示相同的映射關係。這可以確保 equals 方法在 Map 介面的不同實作中正常工作。

此實作首先檢查指定的物件是否為此映射;如果是,則返回 true。然後,它將檢查指定的物件是否是一個大小與此映射相等的映射;如果不是,則返回 false。如果是,則在此映射的 entrySet collection 上進行迭代,並檢查指定的映射是否包含此映射所包含的每個映射關係。如果指定的映射中不包含這樣的映射關係,則返回 false。如果迭代完成,則返回 true

指定者:
介面 Map<K,V> 中的 equals
覆寫:
類別 Object 中的 equals
參數:
o - 要與此映射進行相等性比較的物件
返回:
如果指定的物件等於此映射,則返回 true
另請參見:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
返回此映射的雜湊碼值。映射的雜湊碼被定義為該映射的 entrySet() 視圖中每個條目的雜湊碼之和。這確保了 m1.equals(t2) 對於任意兩個映射 m1m2 都意味著 m1.hashCode()==m2.hashCode(),正如 Object.hashCode() 的常規協定所要求的。

此實作在 entrySet() 上進行迭代,對 set 中的每個元素(條目)調用 hashCode(),併合計結果。

指定者:
介面 Map<K,V> 中的 hashCode
覆寫:
類別 Object 中的 hashCode
返回:
此映射的雜湊碼值。
另請參見:
Map.Entry.hashCode(), Object.equals(Object), Set.equals(Object)

toString

public String toString()
返回此映射的字元串表示形式。該字元串表示形式由鍵-值映射關係列表組成,按照該映射 entrySet 視圖的迭代器返回的順序排列,並用括號 ("{}") 括起來。相鄰的映射關係是用字元 ", "(逗號加空格)分隔的。每個鍵-值映射關係按以下方式呈現:鍵,後面是一個等號 ("="),再後面是關聯的值。鍵和值都通過 String.valueOf(Object) 轉換為字元串。

覆寫:
類別 Object 中的 toString
返回:
此映射的字元串表示形式。

clone

protected Object clone()
                throws CloneNotSupportedException
返回此 AbstractMap 實例的淺表副本:不複製鍵和值本身。

覆寫:
類別 Object 中的 clone
返回:
此映射的淺表副本
拋出:
CloneNotSupportedException - 如果物件的類別不支持 Cloneable 介面,則覆寫 clone 方法的子類別也會拋出此異常,以指示無法複製某個實例。
另請參見:
Cloneable

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only