WeakHashMap類是Map接口的一個實作,它隻存儲對鍵的弱引用。僅存儲弱引用允許在鍵不再在WeakHashMap之外引用時對鍵值對進行垃圾收集。
此類提供了利用弱引用功能的最簡單方法。它對于實作“類似系統資料庫”的資料結構很有用,其中當任何線程不再可以通路鍵時,項目的實用程式就會消失。
WeakHashMap的功能與HashMap相同,但有一個非常重要的特性:如果Java記憶體管理器不再具有對指定為鍵的對象的強引用,則将删除映射中的條目。
弱引用 - 如果對象的唯一引用是弱引用,則垃圾回收器可以随時回收對象的記憶體。它不必等到系統記憶體不足。通常,它将在下次垃圾收集器運作時釋放。
以下是WeakHashMap類支援的構造函數清單。
編号
構造函數
描述
1
WeakHashMap()
此構造函數使用預設初始容量(16)和預設加載因子(0.75)構造一個新的空WeakHashMap。
2
WeakHashMap(int initialCapacity)
此構造函數使用給定的初始容量和預設加載因子(0.75)構造一個新的空WeakHashMap。
3
WeakHashMap(int initialCapacity, float loadFactor)
4
WeakHashMap(Map t)
此構造函數構造一個新的WeakHashMap,其映射與指定的Map相同。
除了從父類繼承的方法之外,WeakHashMap還定義了以下方法 -
編号
方法
描述
1
void clear()
從此映射中删除所有映射。
2
boolean containsKey(Object key)
如果此映射包含指定鍵的映射,則傳回true。
3
boolean containsValue(Object value)
如果此映射将一個或多個鍵映射到指定值,則傳回true。
4
Set entrySet()
傳回此映射中包含的映射的集合視圖。
5
Object get(Object key)
傳回指定鍵在此辨別哈希映射中映射到的值,如果映射不包含此鍵的映射,則傳回null。
6
boolean isEmpty()
如果此映射不包含鍵-值映射,則傳回true。
7
Set keySet()
傳回此映射中包含的鍵的set視圖。
8
Object put(Object key, Object value)
将指定的值與此映射中的指定鍵相關聯。
9
void putAll(Map m)
将指定映射中的所有映射複制到此映射。這些映射将替換此映射對目前位于指定映射中鍵的映射。
10
Object remove(Object key)
從此映射中删除此鍵的映射(如果存在)。
11
int size()
傳回此映射中鍵-值映射的數量。
12
Collection values()
傳回此映射中包含值的集合視圖。
示例
以下程式示範了如何使用此集合支援的幾種方法 -
import java.util.*;
public class WeakHashMapDemo {
private static Map map;
public static void main(String args[]) {
map = new WeakHashMap();
map.put(new String("Yiibai.com"), "Kaops.com");
Runnable runner = new Runnable() {
public void run() {
while (map.containsKey("Yiibai.com")) {
try {
Thread.sleep(500);
} catch (InterruptedException ignored) {
}
System.out.println("Thread waiting");
System.gc();
}
}
};
Thread t = new Thread(runner);
t.start();
System.out.println("Main waiting");
try {
t.join();
} catch (InterruptedException ignored) {
}
}
}
執行上面示例代碼,得到以下結果 -
Main waiting
Thread waiting
如果不包含對System.gc()的調用,系統可能永遠不會運作垃圾收集器,因為程式使用的記憶體不多。對于更活躍的程式,調用是不必要的。
¥ 我要打賞
糾錯/補充
收藏
加QQ群啦,易百教程官方技術學習群
注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。