The Java Developers Almanac 1.4


Order this book from Amazon.

   
Home > List of Packages > java.util  [50 examples] > Hash Tables  [3 examples]

e357. Automatically Removing an Unreferenced Element from a Hash Table

When a key is added to a map, the map will prevent the key from being garbage-collected. However, a weak map will automatically remove a key if the key is not being referenced by any other object. An example where this type of map might be useful is a registry where a registrant is automatically removed after it is garbage-collected.
    // Create the weak map
    Map weakMap = new WeakHashMap();
    
    // Add a key to the weak map
    weakMap.put(keyObject, valueObject);
    
    // Get all keys that are still being referenced
    Iterator it = weakMap.keySet().iterator();
    while (it.hasNext()) {
        // Get key
        Object key = it.next();
    }
The weak map does not automatically release the value if it is no longer used. To enable automatically release of the value, the value must be wrapped in a WeakReference object:
    WeakReference weakValue = new WeakReference(valueObject);
    weakMap.put(keyObject, weakValue);
    
    // Get all keys that are still being referenced and check whether
    // or not the value has been garbage-collected
    it = weakMap.keySet().iterator();
    while (it.hasNext()) {
        // Get key
        Object key = it.next();
    
        weakValue = (WeakReference)weakMap.get(key);
        if (weakValue == null) {
            // Value has been garbage-collected
        } else {
            // Get value
            valueObject = weakValue.get();
        }
    }

 Related Examples
e355. Creating a Hash Table
e356. Creating a Map That Retains Order-of-Insertion

See also: Arrays    Bits    Collections    Dates    Lists    Property Files    Sets    Sorted Collections    Time    Timers   


© 2002 Addison-Wesley.