开发者社区> 问答> 正文

Java IdentityHashMap与HashMap的区别

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

展开
收起
蛮大人123 2016-02-27 14:04:30 3255 0
2 条回答
写回答
取消 提交回答
  • 参考IdentifyHashMap的代码注释: * This class implements the Map interface with a hash table, using * reference-equality in place of object-equality when comparing keys (and * values). In other words, in an IdentityHashMap, two keys * k1 and k2 are considered equal if and only if * (k1==k2). (In normal Map implementations (like * HashMap) two keys k1 and k2 are considered equal * if and only if (k1==null ? k2==null : k1.equals(k2)).) 关键点: HashMap判断两个key相同条件是key1.equals(key2); 而IdentifyHashMap判断key相同的条件是key1 == key2;
    2019-07-17 18:48:47
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    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实现。

    2019-07-17 18:48:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载