简单模拟WeakHashMap

简单模拟一下上篇文章中提到的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

你可能感兴趣的:(WeakHashMap)