JDK集合之IdentityHashMap

在JDK1.4 时新增, IdentityHashMap 实现了Map 接口的类,当比较 key相等的时候,使用引用来比较 替代对象相等。
这个类不是一个通用的 Map 接口的实现。提供了一些map的操作,允许 key 和 value 为 null 值。不能保证map的顺序。这个类对于基础操作 getput 提供了常量时间的操作。使用System#identifyHashCode 生成hash值。另外这个类是线程不安全,在多线程操作的情况下,需要外部进行同步操作。例如:

Map m = Collections.synchronizedMap(new IdentityHashMap(...));

hash生成的方法:

private static int hash(Object x, int length) {  
    int h = System.identityHashCode(x);  
  // Multiply by -127, and left-shift to use least bit as part of hash  
  return ((h << 1) - (h << 8)) & (length - 1);  
}

实例

public class IdentifyHashMapTest {  

    public static void main(String[] args) {  
      IdentityHashMap identityHashMap = new IdentityHashMap();  
      identityHashMap.put(new String("1111"), 111);  
      String one = new String("1111");  
      identityHashMap.put(one, 2222);  
      System.out.println(identityHashMap.size());  
      System.out.println(identityHashMap.containsKey("1111"));  
      System.out.println(identityHashMap.get("1111"));  
      System.out.println(identityHashMap.get(one));  
  }  
}
// output:
// 2
// false
// null
// 2222
添加新评论