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 identicalwhether 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.

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 equals(Object o);
public V get(Object key);
public int hashCode( );
public boolean isEmpty( ); default:true
public Set<K> keySet( );
public V put(K key, V value);
public void putAll(Map<? extends K,? extends V> t);
public V remove(Object key);
public int size( );
public Collection<V> values( );
// Public Methods Overriding AbstractMap
public Object clone( );
}