W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
java.lang.Object
|---java.util.AbstractMap<K,V&
|---|---java.util.WeakHashMap<K,V&
public class WeakHashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>
Map 接口的基于哈希表的實(shí)現(xiàn),帶有弱鍵。 WeakHashMap 中的條目在其鍵不再常用時(shí)將被自動(dòng)刪除。 更準(zhǔn)確地說(shuō),給定鍵的映射的存在不會(huì)阻止該鍵被垃圾收集器丟棄,也就是說(shuō),使其可終結(jié),最終確定,然后回收。 當(dāng)一個(gè)鍵被丟棄時(shí),它的條目被有效地從映射中刪除,所以這個(gè)類的行為與其他映射實(shí)現(xiàn)有些不同。
支持空值和空鍵。 該類具有與HashMap類相似的性能特點(diǎn),并且具有相同的初始容量和負(fù)載因子的效率參數(shù)。
像大多數(shù)集合類一樣,這個(gè)類是不同步的。 可以使用 Collections#synchronizedMap 方法構(gòu)造同步的 WeakHashMap。
此類主要用于關(guān)鍵對(duì)象,其 equals 方法使用 == 運(yùn)算符測(cè)試對(duì)象身份。 一旦這樣的鍵被丟棄,它就永遠(yuǎn)無(wú)法重新創(chuàng)建,因此以后不可能在 WeakHashMap 中查找該鍵并驚訝于它的條目已被刪除。 此類將非常適用于其 equals 方法不基于對(duì)象標(biāo)識(shí)的關(guān)鍵對(duì)象,例如 String 實(shí)例。 然而,使用這種可重新創(chuàng)建的鍵對(duì)象,自動(dòng)刪除鍵已被丟棄的 WeakHashMap 條目可能會(huì)令人困惑。
WeakHashMap 類的行為部分取決于垃圾收集器的行為,因此一些熟悉的(盡管不是必需的)Map 不變量不適用于此類。 因?yàn)槔占骺赡茈S時(shí)丟棄鍵,所以 WeakHashMap 可能表現(xiàn)得好像一個(gè)未知線程正在默默地刪除條目。 特別是,即使您在 WeakHashMap 實(shí)例上進(jìn)行同步并且不調(diào)用它的任何 mutator 方法,size 方法也有可能隨著時(shí)間的推移返回較小的值,isEmpty 方法返回 false 然后返回 true,containsKey 方法返回 給定鍵的 true 和 false,get 方法返回給定鍵的值,但稍后返回 null,put 方法返回 null,remove 方法返回 false,之前出現(xiàn)在 映射,并用于對(duì)鍵集、值集合和條目集的連續(xù)檢查,以產(chǎn)生連續(xù)較少數(shù)量的元素。
WeakHashMap 中的每個(gè)鍵對(duì)象都間接存儲(chǔ)為弱引用的所指對(duì)象。 因此,只有在映射內(nèi)部和外部的弱引用已被垃圾收集器清除后,才會(huì)自動(dòng)刪除鍵。
實(shí)現(xiàn)說(shuō)明:WeakHashMap 中的值對(duì)象由普通的強(qiáng)引用保存。 因此,應(yīng)注意確保值對(duì)象不會(huì)直接或間接地強(qiáng)烈引用它們自己的鍵,因?yàn)檫@將防止鍵被丟棄。 請(qǐng)注意,值對(duì)象可以通過(guò) WeakHashMap 本身間接引用其鍵; 也就是說(shuō),一個(gè)值對(duì)象可以強(qiáng)引用某個(gè)其他鍵對(duì)象,其關(guān)聯(lián)的值對(duì)象反過(guò)來(lái)又強(qiáng)引用第一個(gè)值對(duì)象的鍵。 如果映射中的值不依賴于持有對(duì)它們的強(qiáng)引用的映射,解決此問(wèn)題的一種方法是在插入之前將值本身包裝在 WeakReferences 中,如:m.put(key, new WeakReference(value)), 然后在每次獲取時(shí)打開(kāi)包裝。
由此類的所有“集合視圖方法”返回的集合的迭代器方法返回的迭代器是快速失敗的:如果在創(chuàng)建迭代器后的任何時(shí)間對(duì)映射進(jìn)行結(jié)構(gòu)修改,除了通過(guò)迭代器自己的刪除之外的任何方式 方法,迭代器將拋出 ConcurrentModificationException。 因此,面對(duì)并發(fā)修改,迭代器快速而干凈地失敗,而不是在未來(lái)不確定的時(shí)間冒任意的、非確定性的行為。
請(qǐng)注意,不能保證迭代器的快速失敗行為,因?yàn)橐话銇?lái)說(shuō),在存在不同步的并發(fā)修改的情況下,不可能做出任何硬保證。 快速失敗的迭代器會(huì)盡最大努力拋出 ConcurrentModificationException。 因此,編寫一個(gè)依賴于這個(gè)異常的正確性的程序是錯(cuò)誤的:迭代器的快速失敗行為應(yīng)該只用于檢測(cè)錯(cuò)誤。
此類是 Java 集合框架的成員。
從類 java.util.AbstractMap 繼承的嵌套類/接口 |
---|
AbstractMap.SimpleEntryK,V, AbstractMap.SimpleImmutableEntryK,V |
從接口 java.util.Map 繼承的嵌套類/接口 |
---|
Map.EntryK,V |
構(gòu)造函數(shù) | 描述 |
---|---|
WeakHashMap() | 構(gòu)造一個(gè)具有默認(rèn)初始容量 (16) 和加載因子 (0.75) 的新的空 WeakHashMap。 |
WeakHashMap(int initialCapacity) | 使用給定的初始容量和默認(rèn)加載因子 (0.75) 構(gòu)造一個(gè)新的空 WeakHashMap。 |
WeakHashMap(int initialCapacity, float loadFactor) | 使用給定的初始容量和給定的負(fù)載因子構(gòu)造一個(gè)新的空 WeakHashMap。 |
WeakHashMap(Map<? extends K,? extends V> m) | 構(gòu)造一個(gè)與指定映射具有相同映射的新 WeakHashMap。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
void | clear() | 從此 map 中刪除所有映射。 |
boolean | containsKey(Object key) | 如果此映射包含指定鍵的映射,則返回 true。 |
boolean | containsValue(Object value) | 如果此映射將一個(gè)或多個(gè)鍵映射到指定值,則返回 true。 |
SetMap.EntryK,V | entrySet() | 返回此映射中包含的映射的 Set 視圖。 |
void | forEach(BiConsumer<? super K,? super V> action) | 對(duì)該映射中的每個(gè)條目執(zhí)行給定的操作,直到處理完所有條目或該操作引發(fā)異常。 |
V | get(Object key) | 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。 |
boolean | isEmpty() | 如果此映射不包含鍵值映射,則返回 true。 |
SetK | keySet() | 返回此映射中包含的鍵的 Set 視圖。 |
V | put(K key, V value) | 將指定的值與此映射中的指定鍵相關(guān)聯(lián)。 |
void | putAll(Map<? extends K,? extends V> m) | 將所有映射從指定映射復(fù)制到此映射。 |
V | remove(Object key) | 如果存在,則從此弱哈希映射中刪除鍵的映射。 |
void | replaceAll(BiFunction<? super K,? super V,? extends V> function) | 將每個(gè)條目的值替換為對(duì)該條目調(diào)用給定函數(shù)的結(jié)果,直到所有條目都已處理或該函數(shù)引發(fā)異常。 |
int | size() | 返回此映射中鍵值映射的數(shù)量。 |
CollectionV | values() | 返回此映射中包含的值的集合視圖。 |
從類 java.util.AbstractMap 繼承的方法 |
---|
clone, equals, hashCode, toString |
從接口 java.util.Map 繼承的方法 |
---|
compute, computeIfAbsent, computeIfPresent, equals, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace |
從類 java.lang.Object 繼承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
public WeakHashMap(int initialCapacity, float loadFactor)
使用給定的初始容量和給定的負(fù)載因子構(gòu)造一個(gè)新的空 WeakHashMap。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
initialCapacity | WeakHashMap的初始容量 |
loadFactor | WeakHashMap 的負(fù)載因子 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果初始容量為負(fù)數(shù),或者負(fù)載因子為非正數(shù)。 |
public WeakHashMap(int initialCapacity)
使用給定的初始容量和默認(rèn)加載因子 (0.75) 構(gòu)造一個(gè)新的空 WeakHashMap。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
initialCapacity | WeakHashMap的初始容量 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果初始容量為負(fù) |
public WeakHashMap()
構(gòu)造一個(gè)具有默認(rèn)初始容量 (16) 和加載因子 (0.75) 的新的空 WeakHashMap。
public WeakHashMap(Map<? extends K,? extends V> m)
構(gòu)造一個(gè)與指定映射具有相同映射的新 WeakHashMap。 WeakHashMap 是使用默認(rèn)加載因子 (0.75) 和足以在指定映射中保存映射的初始容量創(chuàng)建的。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
m | 其映射將放置在此 map 中的 map |
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果指定的 map 為空 |
public int size()
返回此映射中鍵值映射的數(shù)量。 此結(jié)果是一個(gè)快照,可能不會(huì)反映在下次嘗試訪問(wèn)之前將被刪除的未處理?xiàng)l目,因?yàn)樗鼈儾辉俦灰谩?/p>
指定者:
接口 MapK,V 中的大小
覆蓋:
AbstractMapK,V 類中的大小
返回:
此映射中的鍵值映射的數(shù)量
public boolean isEmpty()
如果此映射不包含鍵值映射,則返回 true。 此結(jié)果是一個(gè)快照,可能不會(huì)反映在下次嘗試訪問(wèn)之前將被刪除的未處理?xiàng)l目,因?yàn)樗鼈儾辉俦灰谩?/p>
指定者:
接口 MapK,V 中的 isEmpty
覆蓋:
AbstractMapK,V 類中的 isEmpty
返回:
如果此映射不包含鍵值映射,則為 true
public V get(Object key)
返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。
更正式地說(shuō),如果此映射包含從鍵 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),則此方法返回 v; 否則返回null。 (最多可以有一個(gè)這樣的映射。)
返回值為 null 并不一定表示該映射不包含該鍵的映射; 映射也可能將鍵顯式映射為空。 containsKey 操作可用于區(qū)分這兩種情況。
指定者:
進(jìn)入接口 MapK,V
覆蓋:
進(jìn)入類 AbstractMapK,V
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 要返回其關(guān)聯(lián)值的鍵 |
返回:
指定鍵映射到的值,如果此映射不包含該鍵的映射,則為 null
public boolean containsKey(Object key)
如果此映射包含指定鍵的映射,則返回 true。
指定者:
containsKey 在接口 MapK,V
覆蓋:
類 AbstractMapK,V 中的 containsKey
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 要測(cè)試在此映射中是否存在的鍵 |
返回:
如果存在鍵映射,則為 true; 否則為 false
public V put(K key, V value)
將指定的值與此映射中的指定鍵相關(guān)聯(lián)。 如果映射先前包含此鍵的映射,則替換舊值。
指定者:
放入接口 MapK,V
覆蓋:
放入類 AbstractMapK,V
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 與指定值關(guān)聯(lián)的鍵。 |
value | 與指定鍵關(guān)聯(lián)的值。 |
返回:
與 key 關(guān)聯(lián)的前一個(gè)值,如果沒(méi)有 key 映射,則返回 null。 (返回 null 還可以指示映射先前將 null 與 key 關(guān)聯(lián)。)
public void putAll(Map<? extends K,? extends V> m)
將所有映射從指定映射復(fù)制到此映射。 這些映射將替換此映射對(duì)當(dāng)前指定映射中的任何鍵的任何映射。
指定者:
putAll在接口MapK,V中
覆蓋:
putAll 在類 AbstractMapK,V
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
m | 要存儲(chǔ)在此映射中的映射。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果指定的 map 為空。 |
public V remove(Object key)
如果存在,則從此弱哈希映射中刪除鍵的映射。 更正式地說(shuō),如果此映射包含從鍵 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),則刪除該映射。 (地圖最多可以包含一個(gè)這樣的映射。)
返回此映射先前與鍵關(guān)聯(lián)的值,如果映射不包含鍵的映射,則返回 null。 返回值為 null 并不一定表示該映射不包含該鍵的映射; map 也有可能將鍵顯式映射為空。
一旦調(diào)用返回,映射將不包含指定鍵的映射。
指定者:
在接口 MapK,V 中移除
覆蓋:
在類 AbstractMapK,V 中刪除
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 要從映射中刪除其映射的鍵 |
返回:
與鍵關(guān)聯(lián)的前一個(gè)值,如果沒(méi)有鍵映射,則返回 null
public void clear()
從此 map 中刪除所有映射。 此調(diào)用返回后,map 將為空。
指定者:
在界面 MapK,V 中清除
覆蓋:
在類 AbstractMapK,V 中清除
public boolean containsValue(Object value)
如果此映射將一個(gè)或多個(gè)鍵映射到指定值,則返回 true。
指定者:
接口 MapK,V 中的 containsValue
覆蓋:
類 AbstractMapK,V 中的 containsValue
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
value | 要測(cè)試其在此映射中的存在的值 |
返回:
如果此映射將一個(gè)或多個(gè)鍵映射到指定值,則為 true
public SetK keySet()
返回此映射中包含的鍵的 Set 視圖。 集合由 map 支持,因此對(duì) map 的更改會(huì)反映在集合中,反之亦然。 如果在對(duì)集合進(jìn)行迭代時(shí)修改了映射(通過(guò)迭代器自己的刪除操作除外),則迭代的結(jié)果是不確定的。 該集合支持元素移除,即通過(guò) Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應(yīng)的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的 keySet
覆蓋:
AbstractMapK,V 類中的 keySet
返回:
此 map 中包含的鍵的集合視圖
public CollectionV values()
返回此映射中包含的值的集合視圖。 集合由 map 支持,因此對(duì) map 的更改會(huì)反映在集合中,反之亦然。 如果在對(duì)集合進(jìn)行迭代時(shí)修改了映射(通過(guò)迭代器自己的刪除操作除外),則迭代的結(jié)果是不確定的。 該集合支持元素移除,即通過(guò) Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作從映射中移除相應(yīng)的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的值
覆蓋:
AbstractMapK,V 類中的值
返回:
此 map 中包含的值的集合視圖
public SetMap.EntryK,V entrySet()
返回此映射中包含的映射的 Set 視圖。 集合由 map 支持,因此對(duì) map 的更改會(huì)反映在集合中,反之亦然。 如果在對(duì)集合進(jìn)行迭代時(shí)修改了映射(通過(guò)迭代器自己的刪除操作或通過(guò)迭代器返回的映射條目上的 setValue 操作除外),則迭代的結(jié)果是未定義的。 該集合支持元素移除,即通過(guò) Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應(yīng)的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的 entrySet
指定者:
AbstractMapK,V 類中的 entrySet
返回:
此 map 中包含的映射的集合視圖
public void forEach(BiConsumer<? super K,? super V> action)
從接口復(fù)制的描述:map
對(duì)該映射中的每個(gè)條目執(zhí)行給定的操作,直到處理完所有條目或該操作引發(fā)異常。 除非實(shí)現(xiàn)類另有規(guī)定,否則按照條目集迭代的順序執(zhí)行動(dòng)作(如果指定了迭代順序)。動(dòng)作拋出的異常將轉(zhuǎn)發(fā)給調(diào)用者。
指定者:
接口 MapK,V 中的 forEach
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
action | 為每個(gè)條目執(zhí)行的操作 |
public void replaceAll(BiFunction<? super K,? super V,? extends V> function)
從接口復(fù)制的描述:map
將每個(gè)條目的值替換為對(duì)該條目調(diào)用給定函數(shù)的結(jié)果,直到所有條目都已處理或該函數(shù)引發(fā)異常。 函數(shù)拋出的異常被轉(zhuǎn)發(fā)給調(diào)用者。
指定者:
接口 MapK,V 中的 replaceAll
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
function | 應(yīng)用于每個(gè)條目的函數(shù) |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: