単純シミュレーションWeakHashMap

1569 ワード

前の記事で述べた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、出力は以下の通り:
truefalse