Java WeakHashMap

2014-11-24 11:17:35 · 作者: · 浏览: 3

[java]
package com.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;

public class Weakhashmap {

public static void main(String[] args) {

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 之后,
* weakmap的KEY都是WeakReference的.
* 因为b对象还在被map引用,所以没被GC回收.
* 可是a对象则已经被map remove, 所以GC会回收weakmap的a KEY
* value在key清除后, 访问WeakHashMap时会自动被清除.
*/
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());

}
}
}

package com.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;

public class Weakhashmap {

public static void main(String[] args) {

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 之后,
* weakmap的KEY都是WeakReference的.
* 因为b对象还在被map引用,所以没被GC回收.
* 可是a对象则已经被map remove, 所以GC会回收weakmap的a KEY
* value在key清除后, 访问WeakHashMap时会自动被清除.
*/
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());

}
}
}