単純シミュレーションWeakHashMap
1569 ワード
前の記事で述べたWeakHashMapを簡単にシミュレートします.具体的なコードは以下の通りです.
1、模擬Mapクラスを作成する:
2、呼び出しシミュレーションクラス実装
3、出力は以下の通り:
truefalse
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