简单模拟一下上篇文章中提到的WeakHashMap,具体代码如下:
1、创建一个模拟Map类:
class WeakMapTest<K, V> { private ReferenceQueue<K> rq = new ReferenceQueue<K>(); private List<MyEntry> list = new ArrayList<MyEntry>(); public void put(K k, V v) { list.add(new MyEntry(k, v, rq)); } public boolean cantains(V v) { boolean flg = true; MyEntry e = null; while ((e = (MyEntry) rq.poll()) != null) { e.v = null; flg = false; } return flg; } class MyEntry extends WeakReference<K> { private V v; public MyEntry(K k, V v, ReferenceQueue<K> rq) { super(k, rq); this.v = v; } } }
2、调用模拟类实现
public void testMap() throws InterruptedException { WeakMapTest<Object, Object> test = new WeakMapTest<Object, Object>(); Object k = new Object(); Object v = new Object(); test.put(k, v); System.out.println(test.cantains(v)); k = null; System.gc(); System.out.println(test.cantains(v)); } public static void main(String[] args) { try { RefTest t = new RefTest(); t.testMap(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
3、输出如下:
true
false