/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class WeakHashMapDemo {
public static void main
(String[] args
) { // -- Fill a weak hash map with one entry
WeakHashMap<Data, String> map = new WeakHashMap<Data, String>();
Data someDataObject = new Data("foo");
map.put(someDataObject, someDataObject.value);
System.
out.
println("map contains someDataObject ? " + map.
containsKey(someDataObject
));
// -- now make someDataObject elligible for garbage collection...
someDataObject = null;
for (int i = 0; i < 10000; i++) {
if (map.size() == 0) {
System.
out.
println("somDataObject has finally been garbage collected at iteration " + i
+ ", hence the map is now empty"); break;
} else {
}
}
}
static class Data {
this.value = value;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KLyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KIGNsYXNzIFdlYWtIYXNoTWFwRGVtbyB7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIC8vIC0tIEZpbGwgYSB3ZWFrIGhhc2ggbWFwIHdpdGggb25lIGVudHJ5CiAgICAgICAgV2Vha0hhc2hNYXA8RGF0YSwgU3RyaW5nPiBtYXAgPSBuZXcgV2Vha0hhc2hNYXA8RGF0YSwgU3RyaW5nPigpOwogICAgICAgIERhdGEgc29tZURhdGFPYmplY3QgPSBuZXcgRGF0YSgiZm9vIik7CiAgICAgICAgbWFwLnB1dChzb21lRGF0YU9iamVjdCwgc29tZURhdGFPYmplY3QudmFsdWUpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFwIGNvbnRhaW5zIHNvbWVEYXRhT2JqZWN0ID8gIiArIG1hcC5jb250YWluc0tleShzb21lRGF0YU9iamVjdCkpOwoKICAgICAgICAvLyAtLSBub3cgbWFrZSBzb21lRGF0YU9iamVjdCBlbGxpZ2libGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4uLgogICAgICAgIHNvbWVEYXRhT2JqZWN0ID0gbnVsbDsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChtYXAuc2l6ZSgpID09IDApIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic29tRGF0YU9iamVjdCBoYXMgZmluYWxseSBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkIGF0IGl0ZXJhdGlvbiAiICsgaSArICIsIGhlbmNlIHRoZSBtYXAgaXMgbm93IGVtcHR5Iik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGNsYXNzIERhdGEgewogICAgICAgIFN0cmluZyB2YWx1ZTsKICAgICAgICBEYXRhKFN0cmluZyB2YWx1ZSkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgfQogICAgfQp9