天天看點

Java WeakHashMap

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());

      }    

   }  

}