AbstractMap

java.util 類 AbstractMap java.lang.Object java.util.AbstractMap此類提供了 Map 接口的骨幹實現,從而最大限度地減少了實現此接口所需的工作。

簡介

所有已實現的接口:

Map<K,V>

直接已知子類:

ConcurrentHashMap, EnumMap, HashMap, IdentityHashMap, TreeMap, WeakHashMap

--------------------------------------------------------------------------------

public abstract class AbstractMap<K,V>extends Objectimplements Map<K,V>要實現不可修改的映射,程式設計師只需擴展此類並提供 entrySet 方法的實現即可,該方法將返回映射的映射關係 Set 視圖。通常,返回的 Set 將依次在 AbstractSet 上實現。此 Set 不支持 add 或 remove 方法,其疊代器也不支持 remove 方法。

要實現可修改的映射,程式設計師還必須另外重寫此類的 put 方法(否則將拋出 UnsupportedOperationException),並且由 entrySet().iterator() 所返回的疊代器必須另外實現其 remove 方法。

按照 Map 接口規範中的推薦,程式設計師通常應該提供一個 void(無參數)構造方法和 map 構造方法。

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

此類是 Java Collections Framework 的成員。

版本信息

從以下版本開始:

1.2

另請參見:

Map, Collection

--------------------------------------------------------------------------------

嵌套類摘要

從接口 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)

返回此映射將指定鍵映射到的值。

int hashCode()

返回此映射的哈希代碼值。

boolean isEmpty()

如果此映射不包含任何鍵-值映射關係,則返回 true。

Set<K> keySet()

返回包含在此映射中的鍵的 Set 視圖。

V put(K key, V value)

將指定的值與此映射中的指定鍵關聯起來(可選操作)。

void putAll(Map<? extends K,? extends V> t)

將指定映射的所有映射關係複製到此映射中(可選操作)。

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。更正式地說,若且唯若此映射包含至少一個到值 v 的映射關係,並且 (value==null ? v==null : value.equals(v)) 時才返回 true。對於大多數映射實現而言,此操作所需的時間可能與映射的大小呈線性關係。

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

指定者:

接口 Map<K,V> 中的 containsValue

參數:

value - 將測試此映射中是否存在的值。

返回:

如果此映射將一個或多個鍵映射到該值,則返回 true。

--------------------------------------------------------------------------------

containsKey

public boolean containsKey(Object key)如果此映射包含指定鍵的映射關係,則返回 true。

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

指定者:

接口 Map<K,V> 中的 containsKey

參數:

key - 將測試此映射中是否存在的鍵。

返回:

如果此映射包含指定鍵的映射關係,則返回 true。

拋出:

NullPointerException - 如果該鍵為 null 並且此映射不允許包含 null 鍵。

--------------------------------------------------------------------------------

get

public V get(Object key)返回此映射將指定鍵映射到的值。如果該映射不包含此鍵的映射關係,則返回 null。返回值 null 不一定 表明該映射不包含該鍵的映射關係;也可能是該映射顯式地將該鍵映射到 null。可以使用 containsKey 操作來區分這兩種情況。

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

指定者:

接口 Map<K,V> 中的 get

參數:

key - 與返回值關聯的鍵。

返回:

此映射將指定鍵映射到的值。

拋出:

NullPointerException - 如果鍵為 null 並且此映射不允許包含 null 鍵。

另請參見:

containsKey(Object)

--------------------------------------------------------------------------------

put

public V put(K key,

V value)將指定的值與此映射中的指定鍵關聯起來(可選操作)。如果映射以前包含此鍵的映射關係,則替換舊的值。

此實現始終拋出 UnsupportedOperationException。

指定者:

接口 Map<K,V> 中的 put

參數:

key - 將與指定值關聯的鍵。

value - 將與指定鍵關聯的值。

返回:

指定鍵以前的關聯值。如果沒有該鍵的映射關係,則返回 null。(如果該實現支持 null 值,則返回 null 也可以表明該映射以前將 null 與指定鍵相關聯。)

拋出:

UnsupportedOperationException - 如果此映射不支持 put 操作。

ClassCastException - 如果指定鍵或值的類不允許它存儲在此映射中。

IllegalArgumentException - 如果此鍵或值 * 的某方面不允許它存儲在此映射中。

NullPointerException - 如果此映射不允許 null 鍵或值,並且指定鍵或值為 null。

--------------------------------------------------------------------------------

remove

public V remove(Object key)如果此映射中存在此鍵的映射關係,則移除該映射關係(可選操作)。

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

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

指定者:

接口 Map<K,V> 中的 remove

參數:

key - 將從映射中移除其映射關係的鍵。

返回:

指定鍵以前的關聯值。如果沒有該鍵的項,則返回 null。(如果該實現支持 null 值,則返回 null 也可以表明該映射以前將 null 與指定鍵相關聯。)

拋出:

UnsupportedOperationException - 如果此映射不支持 remove 操作。

--------------------------------------------------------------------------------

putAll

public void putAll(Map<? extends K,? extends V> t)將指定映射的所有映射關係複製到此映射中(可選操作)。這些映射關係將替代此映射中已有的,並且指定映射中目前也存在的所有鍵的映射關係。

此實現在指定映射的 entrySet() 集合上進行疊代,並對疊代返回的每一項調用一次此映射的 put 操作。

注意,如果此映射不支持 put 操作,並且指定映射為非空,則此實現會拋出 UnsupportedOperationException。

指定者:

接口 Map<K,V> 中的 putAll

參數:

t - 要存儲在此映射中的映射關係。

拋出:

UnsupportedOperationException - 如果此映射不支持 putAll 操作。

ClassCastException - 如果指定映射中的鍵或值的類不允許它存儲在此映射中。

IllegalArgumentException - 如果指定映射中的鍵或值的某方面不允許它存儲在此映射中。

NullPointerException - 如果指定的映射為 null,或者如果此映射不允許 null 鍵或值,但指定的映射包含了 null 鍵或值。

--------------------------------------------------------------------------------

clear

public void clear()從此映射中移除所有映射關係(可選操作)。

此實現調用 entrySet().clear()。 注意,如果 entrySet 不支持 clear 操作,則此實現會拋出 UnsupportedOperationException。

指定者:

接口 Map<K,V> 中的 clear

拋出:

UnsupportedOperationException - 此映射不支持 clear 操作。

--------------------------------------------------------------------------------

keySet

public Set<K> keySet()返回包含在此映射中的鍵的 Set 視圖。該 Set 受映射的支持,所以對映射的更改反映在 Set 中,反之亦然。(如果在對 Set 進行疊代的同時修改映射,則疊代的結果是不明確的。)Set 支持元素移除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應的項。 它不支持 add 或 addAll 操作。

此實現返回一個為 AbstractSet 創建子類的 Set。子類的 iterator 方法通過此映射的 entrySet() 疊代器返回一個“包裝器對象”。size 方法委託給此映射的 size 方法,而 contains 方法委託給此映射的 containsKey 方法。

Set 是在第一次調用此方法時創建的,並為回響所有後續調用而返回。 因為不執行同步操作,所以對此方法的多個調用很少返回不同的 Set。

指定者:

接口 Map<K,V> 中的 keySet

返回:

包含在此映射中的鍵的 Set 視圖。

--------------------------------------------------------------------------------

values

public Collection<V> values()返回包含在此映射中的值的 collection 視圖。該 collection 受映射的支持,所以對映射的更改反映在 collection 中,反之亦然。(如果在對 collection 進行疊代的同時修改映射,則疊代的結果是不明確的。)collection 支持元素移除,即通過 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作從映射中移除相應的項。它不支持 add 或 addAll 操作。

此實現返回一個為抽象 collection 創建子類的 collection。子類的 iterator 方法通過此映射的 entrySet() 疊代器返回一個“包裝器對象”。size 方法委託給此映射的 size 方法,而 contains 方法委託給此映射的 containsValue 方法。

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

指定者:

接口 Map<K,V> 中的 values

返回:

包含在此映射中的值的 collection 視圖。

--------------------------------------------------------------------------------

entrySet

public abstract Set<Map.Entry<K,V>> entrySet()返回包含在此映射中的映射關係的 Set 視圖。此 Set 的每一個元素都是一個 Map.Entry。該 Set 受映射的支持,所以對映射的更改反映在 Set 中,反之亦然。(如果在對 Set 進行疊代的同時修改映射,則疊代的結果是不明確的。)Set 支持元素移除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應的項。它不支持 add 或 addAll 操作。

指定者:

接口 Map<K,V> 中的 entrySet

返回:

包含在此映射中的映射關係的 Set 視圖。

--------------------------------------------------------------------------------

equals

public boolean equals(Object o)比較指定對象與此映射的相等性。如果給定對象也是一個映射並且兩個映射表示相同的映射關係,則返回 true。更正式地說,如果 t1.keySet().equals(t2.keySet()) 並且對於每一個 t1.keySet() 中的鍵 k 都存在 (t1.get(k)==null ? t2.get(k)==null :t1.get(k).equals(t2.get(k))),則兩個映射 t1 和 t2 表示相同的映射關係 。這可以確保 equals 方法在 map 接口的不同實現中正常工作。

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

指定者:

接口 Map<K,V> 中的 equals

覆蓋:

類 Object 中的 equals

參數:

o - 要與此映射進行相等性比較的對象。

返回:

如果指定的對象等於此映射,則返回 true。

另請參見:

Object.hashCode(), Hashtable

--------------------------------------------------------------------------------

hashCode

public int hashCode()返回此映射的哈希代碼值。映射的哈希代碼被定義為該映射的 entrySet() 視圖中每一項的哈希代碼的總和。這確保了 t1.equals(t2) 對於任意兩個映射 t1 和 t2 都意味著 t1.hashCode()==t2.hashCode(),正如 Object.hashCode 的常規協定所要求的。

此實現在 entrySet() 上進行疊代,對 Collection 中的每個元素(項)調用 hashCode,併合計結果。

指定者:

接口 Map<K,V> 中的 hashCode

覆蓋:

類 Object 中的 hashCode

返回:

此映射的哈希代碼值。

另請參見:

Map.Entry.hashCode(), Object.hashCode(), Object.equals(Object), Set.equals(Object)

--------------------------------------------------------------------------------

toString

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

此實現會創建一個空的字元串緩衝區,追加一個左括弧,然後在映射的 entrySet 視圖上進行疊代,依次追加每個 map.entry 的字元串表示形式。每追加一項後(最後一項除外),將追加字元串 ", "。最後,追加一個右括弧。從字元串緩衝區中獲得一個字元串並返回它。

覆蓋:

類 Object 中的 toString

返回:

此映射的字元串表示形式。

--------------------------------------------------------------------------------

clone

protected Object clone()

throws CloneNotSupportedException返回此 AbstractMap 實例的淺表複製:不克隆鍵和值本身。

覆蓋:

類 Object 中的 clone

返回:

此映射的淺表複製。

拋出:

CloneNotSupportedException - 如果對象的類不支持 Cloneable 接口,則重寫 clone 方法的子類也會拋出此異常,以指示無法克隆某個實例。

另請參見:

Cloneable

相關詞條

相關搜尋

熱門詞條

聯絡我們