WeakHashmap 的概念
關鍵點:-
- 地圖的實施。
- 只儲存對其鍵的弱引用。
弱引用 :僅由弱引用引用的物件是急切的垃圾收集; 在這種情況下,GC 不會等到它需要記憶體。
Hashmap 和 WeakHashMap 之間的差異: -
如果 Java 記憶體管理器不再具有對指定為鍵的物件的強引用,則將在 WeakHashMap 中刪除對映中的條目。
示例: -
public class WeakHashMapTest {
public static void main(String[] args) {
Map hashMap= new HashMap();
Map weakHashMap = new WeakHashMap();
String keyHashMap = new String("keyHashMap");
String keyWeakHashMap = new String("keyWeakHashMap");
hashMap.put(keyHashMap, "Ankita");
weakHashMap.put(keyWeakHashMap, "Atul");
System.gc();
System.out.println("Before: hash map value:"+hashMap.get("keyHashMap")+" and weak hash map value:"+weakHashMap.get("keyWeakHashMap"));
keyHashMap = null;
keyWeakHashMap = null;
System.gc();
System.out.println("After: hash map value:"+hashMap.get("keyHashMap")+" and weak hash map value:"+weakHashMap.get("keyWeakHashMap"));
}
大小差異(HashMap 與 WeakHashMap):
在 HashMap 物件上呼叫 size()
方法將返回相同數量的鍵值對。只有在 HashMap 物件上顯式呼叫 remove()
方法時,size 才會減小。
由於垃圾收集器可能隨時丟棄金鑰,因此 WeakHashMap 的行為可能就像未知執行緒正在靜默刪除條目一樣。因此,size 方法可以隨時間返回較小的值。因此,在 WeakHashMap 中,大小減小會自動發生。