Java IdentityHashMap与HashMap的区别


IdentityHashMap与HashMap的区别
除了 IdentityHashMap中key可以重合,还有别的区别吗

java hashmap

马赛克V5 9 years, 6 months ago

Jdk Api
IdentityHashMap :此类利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。
换句话说,在 IdentityHashMap 中,当且仅当 (k1==k2)
才认为两个键 k1 和 k2 相等、在正常 Map 实现(如 HashMap)中
当且仅当满足下列条件时才认为两个键 k1 和 k2 相等: (k1==null ? k2==null : e1.equals(e2))

讨厌烦死人了 answered 9 years, 6 months ago

  • 两者最主要的区别是 IdentityHashMap 使用的是 == 比较key的值,而 HashMap 使用的是 equals()
  • HashMap 使用的是 hashCode() 查找位置, IdentityHashMap 使用的是 System.identityHashCode(object)
  • IdentityHashMap 理论上来说速度要比 HashMap 快一点
  • 另外一点呢就是 IdentityHashMap 中key能重复,但需要注意一点的是key比较的方法是 == ,所以若要存放两个相同的key,就需要存放不同的地址,下面用代码来说明:

      
       import java.util.HashMap;
    import java.util.IdentityHashMap;
    import java.util.Map;
    
    public class IdentityMapDemo {
    
        public static void main(String[] args) {
             Map identityMap = new IdentityHashMap();
             identityMap.put("a", 1);
             identityMap.put(new String("a"), 2);
             identityMap.put("a", 3);
             System.out.println("Identity Map KeySet Size :: " +  identityMap.keySet().size());
     //输出结果为Identity Map KeySet Size :: 2
         }
    
     }
      
     
只是来看视频的 answered 9 years, 6 months ago

Your Answer