What is IdentityHashMap?

What is IdentityHashMap?

What is IdentityHashMap?
  • In journal == operator meant for reference comparison (address comparison) and equals() method meant for content comparison.
  • It is exactly same as HashMap(including methods and constructors) except the following difference.
  • In the case of normal HashMap, JVM will use .equals() method to identify duplicates keys, which is meant for content comparison.
  • But in the case of identity HashMap JVM will use == operator to identify duplicate keys which are meant for reference comparison(address comparison).
  • This class implements the Map interface with a hash table, using reference-equality in place of object-equality when comparing keys (and values).
  • The map is a special implementation that only supports Identity-based Equality.
  • IdentityHashMap compares keys reference(i.e using ==) , where as HashMap compares Objects.
  • IdentityHashMap use System.identityHashCode(key) for generating a hashcode, where as HashMap uses hashcode(key) for generating a unique hashcode.
  • Initial capacity of IndentityHashMap is 21, whereas HashMap has 16.
  • IdentityHashMap violates Map contract by comparing reference, whereas HashMap doesnâ€t.
  • If you see the below output for both IdentityHashMap and HashMap, you can find that IdenityHashMap allows duplicate keys and values(because of reference comparison), whereas HashMap doesnâ€t allow(because of Object comparison)
package com.java4us;

import java.util.IdentityHashMap;

class Test {
    public static void main(String[] args) {
        Integer i1 = new Integer(10);
        Integer i2 = new Integer(10);
        /*
         * HashMap map = new HashMap();
         * map.put(i1, "Raja");
         * map.put(i2, "Rani");
         * System.out.println(map); // {{10=Rani}}
         */
        IdentityHashMap map = new IdentityHashMap();
        map.put(i1, "Raja");
        map.put(i2, "Rani");
        System.out.println(map);    //{10=Rani, 10=Raja}
    }
}
  • I1 and i2 are duplicates keys because i1.equals(i2) returns true.
  • If we replace HashMap with IdentityHashMap then i1 and i2 are not duplicate keys because i1==i2 returns false.
2018-06-21

Leave a Reply

Your email address will not be published. Required fields are marked *

*