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 中,大小減小會自動發生