WeakHashMapとHashMapの違い
1714 ワード
http://mzlly999.iteye.com/blog/1126049
WeakHashMap、このMapの特徴は、自身がkeyへの参照を持っている以外に、このkeyに他の参照がない場合、このmapは自動的にこの値を破棄することです.
例を参照:この例では、2つのMapオブジェクトが宣言されています.1つはHashMapで、1つはWeakHashMapです.同時に、2つのmapにa、bの2つのオブジェクトを入れます.HashMap removeがaを除去し、a、bがnullを指すと、WeakHashMapのaは自動的に回収されます.これは,aオブジェクトに対してHashMapが removeが抜けてaをnullに向けると、WeakHashMapにaを指す以外にaを指すポインタが保存されていないので、WeakHashMapは自動的にaを切り捨て、bオブジェクトに対してnullを指すが、HashMapにはbを指すポインタがあるので、
WeakHashMapは残ります
WeakHashMap、このMapの特徴は、自身がkeyへの参照を持っている以外に、このkeyに他の参照がない場合、このmapは自動的にこの値を破棄することです.
例を参照:この例では、2つのMapオブジェクトが宣言されています.1つはHashMapで、1つはWeakHashMapです.同時に、2つのmapにa、bの2つのオブジェクトを入れます.HashMap removeがaを除去し、a、bがnullを指すと、WeakHashMapのaは自動的に回収されます.これは,aオブジェクトに対してHashMapが removeが抜けてaをnullに向けると、WeakHashMapにaを指す以外にaを指すポインタが保存されていないので、WeakHashMapは自動的にaを切り捨て、bオブジェクトに対してnullを指すが、HashMapにはbを指すポインタがあるので、
WeakHashMapは残ります
package test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;
public class Test {
public static void main(String[] args) throws Exception {
String a = new String("a");
String b = new String("b");
Map weakmap = new WeakHashMap();
Map map = new HashMap();
map.put(a, "aaa");
map.put(b, "bbb");
weakmap.put(a, "aaa");
weakmap.put(b, "bbb");
map.remove(a);
a=null;
b=null;
System.gc();
Iterator i = map.entrySet().iterator();
while (i.hasNext()) {
Map.Entry en = (Map.Entry)i.next();
System.out.println("map:"+en.getKey()+":"+en.getValue());
}
Iterator j = weakmap.entrySet().iterator();
while (j.hasNext()) {
Map.Entry en = (Map.Entry)j.next();
System.out.println("weakmap:"+en.getKey()+":"+en.getValue());
}
}
}