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 中,大小减小会自动发生