Java IdentityHashMap与HashMap的区别
阿神
阿神 2017-04-17 13:40:07
[Java讨论组]
阿神
阿神

闭关修行中......

全部回复(3)
迷茫
  1. 简单说IdentityHashMap与常用的HashMap的区别是:前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2) == true 时才会认为两个key相等。IdentityHashMap 允许使用null作为key和value. 不保证任何Key-value对的之间的顺序, 更不能保证他们的顺序随时间的推移不会发生变化.

  2. IdentityHashMap有其特殊用途,比如序列化或者深度复制。或者记录对象代理。

  3. 举个例子,jvm中的所有对象都是独一无二的,哪怕两个对象是同一个class的对象,而且两个对象的数据完全相同,对于jvm来说,他们也是完全不同的,如果要用一个map来记录这样jvm中的对象,你就需要用IdentityHashMap,而不能使用其他Map实现。

伊谢尔伦
  • 两者最主要的区别是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
         }
    
     }
    
怪我咯

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号