package com.haogrgr.test.util; import java.lang.ref.Reference; import java.lang.ref.WeakReference; import java.util.Map; import java.util.WeakHashMap; /** * 弱引用Map,适合做缓存,包装WeakHashMap, 将Value也使用WeakReference, * 防止当WeakHashMap的key回收后,还是有value的强引用, * 需要等到下一次WeakHashMap相关方法调用才会清除key为空的value * 抄的com.sum.WeakCache -,-; * 非线程安全 * @see java.util.WeakHashMap.expungeStaleEntries() * <p>Author: desheng.tu</p> * <p>Date: 2014年7月3日</p> */ public class WeakCacheMap<K, V> { private final Map<K, Reference<V>> map = new WeakHashMap<K, Reference<V>>(); public V get(K key) { Reference<V> localReference = this.map.get(key); if (localReference == null) { return null; } V localObject = localReference.get(); if (localObject == null) { this.map.remove(key); } return localObject; } public void put(K key, V value) { if (value != null) { this.map.put(key, new WeakReference<V>(value)); } else this.map.remove(key); } public void clear() { this.map.clear(); } }