This Map implementation has a API that is very similar to HashMap, and uses an internal hashtable, like HashMap does. However, it behaves differently from HashMap in one very important way. When testing two keys to see if they are equal, HashMap, LinkedHashMap and TreeMap use the equals( ) method to determine whether the two objects are indistinguishable in terms of their content or state. IdentityHashMap is different: it uses the == operator to determine whether the two key objects are identical—whether they are exactly the same object. This one difference in how key equality is tested has profound ramifications for the behavior of the Map. In most cases, the equality testing of a HashMap, LinkedHashMap or TreeMap is the appropriate behavior, and you should use one of those classes. For certain purposes, however, the identity testing of IdentityHashMap is what is required.


Figure 16-27. java.util.IdentityHashMap<K,V>

public class IdentityHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, 
        Serializable, Cloneable {
// Public Constructors
     public IdentityHashMap( );  
     public IdentityHashMap(int expectedMaxSize);  
     public IdentityHashMap(Map<? extends K,? extends V> m);  
// Methods Implementing Map
     public void clear( );  
     public boolean containsKey(Object key);  
     public boolean containsValue(Object value);  
     public Set<Map.Entry<K,V>> entrySet( ); public boolean ...

Get Java in a Nutshell, 5th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.