IdentityHashMap在比较两个元素时需要key完全相等(key1==key2),而普通的HashMap仅仅需要equals()返回true且hashcode值相同。其它性质与HashMap基本类似。

public class IdentityHashMapTest {
    public static void main(String[] args) {
        IdentityHashMap ihm = new IdentityHashMap();
        // 下两行添加两个元素
        ihm.put(new String("卡布奇诺"), 99);
        ihm.put(new String("卡布奇诺"), 90);
        // 下两行添加一个元素
        ihm.put("烧仙草", 18);
        ihm.put("烧仙草", 17);
        //{卡布奇诺=99, 烧仙草=17, 卡布奇诺=90}
        System.out.println(ihm);
    }
}

EnumMap专门应用于枚举类,内部通过数组来实现,这种实现形式紧凑、高效;EnumMap按照自然排序(枚举值在枚举类中定义顺序)对元素进行排序;不允许key为null值。

enum Season {
    SPRING, SUMMER, FALL, WINTER
}

public class EnumMapTest {
    public static void main(String[] args) {
        EnumMap ehm = new EnumMap(Season.class);
        ehm.put(Season.SUMMER, "夏日炎炎");
        ehm.put(Season.SPRING, "春暖花开");
        //{SPRING=春暖花开, SUMMER=夏日炎炎}
        System.out.println(ehm);
    }
}

HashMap是最常用的Map集合,能够提供快速的查询,Hashtable线程安全,带来性能损耗,同时过于古老,推荐使用Collections将HashMap变成线程安全进行替代。LinkedHashMap可以维护元素的插入顺序。TreeMap对集合元素进行了排序,可以通过toArray()生成key的数组,随后用binarySearch()对元素进行快速查找。EnumMap应用于枚举类,效率最高。