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应用于枚举类,效率最高。