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不会等到它需要内存。
日期:2020-06-02 22:15:25 来源:oir作者:oir