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()方法时,大小才会减小。
因为垃圾收集器可能随时丢弃key,所以WeakHashMap的行为可能就好像未知线程正在默默地删除条目一样。因此,size方法可以随时间返回较小的值。因此,在WeakHashMap中,大小自动减小。

WeakHashMap的概念

要点:

  • 对Map的实现。
  • 只存储对其键的弱引用。

弱引用:只被弱引用引用的对象被急切地垃圾收集;在这种情况下,GC不会等到它需要内存。

在java中的WeakHashMap
日期:2020-06-02 22:15:25 来源:oir作者:oir