In WeakHashMap, an entry is automatically removed when its key is no longer exits.More precisely, the presence of a mapping for a given key will not prevent the key from being discarded by the garbage collector, that is, made finalizable, finalized, and then reclaimed.
When a key has been discarded its entry is effectively removed from the map, so this class behaves somewhat differently from other Map implementations.
package collection.demos;
import java.util.WeakHashMap;
class A {
long[] data = new long[1024 * 1024];
long id = System.currentTimeMillis();
}
public class WeakHashMapDemo {
public static void main(String[] args) {
WeakHashMap<A, String> phoneNumbers = new WeakHashMap<A, String>();
A a1 = new A();
A a2 = new A();
A a3 = new A();
phoneNumbers.put(a1, "11111111");
phoneNumbers.put(a2, "22222222");
phoneNumbers.put(a3, "33333333");
System.out.println("Elements : " + phoneNumbers);
a1 = new A();
a1 = new A();
a1 = new A();
a1 = new A();
System.out.println("Elements : " + phoneNumbers);
}
}
OUTPUT
Elements : {collection.demos.A@a90653=22222222, collection.demos.A@de6ced=33333333, collection.demos.A@190d11=11111111}
Elements : {collection.demos.A@a90653=22222222, collection.demos.A@de6ced=33333333}
In the above output, you will not see the first element having value 1111111111, because it is deleted automatically from WeakHasMap. Here, the Object being refered by a1 refrerence variable, is working as a key to value 111111111. When execution goes next, other four object are create sequencly and reference of newly created objects are host by a1 variable. So, the reference stored into a1 of previous object is removed and that object becomes free. Now the free object is reclaimed by garbaze collection. Object that was collected by garbze collection was working as key of value 1111111. So this value is removed automaticaly from WeakedHashMap.
When a key has been discarded its entry is effectively removed from the map, so this class behaves somewhat differently from other Map implementations.
package collection.demos;
import java.util.WeakHashMap;
class A {
long[] data = new long[1024 * 1024];
long id = System.currentTimeMillis();
}
public class WeakHashMapDemo {
public static void main(String[] args) {
WeakHashMap<A, String> phoneNumbers = new WeakHashMap<A, String>();
A a1 = new A();
A a2 = new A();
A a3 = new A();
phoneNumbers.put(a1, "11111111");
phoneNumbers.put(a2, "22222222");
phoneNumbers.put(a3, "33333333");
System.out.println("Elements : " + phoneNumbers);
a1 = new A();
a1 = new A();
a1 = new A();
a1 = new A();
System.out.println("Elements : " + phoneNumbers);
}
}
OUTPUT
Elements : {collection.demos.A@a90653=22222222, collection.demos.A@de6ced=33333333, collection.demos.A@190d11=11111111}
Elements : {collection.demos.A@a90653=22222222, collection.demos.A@de6ced=33333333}
In the above output, you will not see the first element having value 1111111111, because it is deleted automatically from WeakHasMap. Here, the Object being refered by a1 refrerence variable, is working as a key to value 111111111. When execution goes next, other four object are create sequencly and reference of newly created objects are host by a1 variable. So, the reference stored into a1 of previous object is removed and that object becomes free. Now the free object is reclaimed by garbaze collection. Object that was collected by garbze collection was working as key of value 1111111. So this value is removed automaticaly from WeakedHashMap.
Comments