IdentityHashMap与HashMap的区别
除了 IdentityHashMap中key可以重合,还有别的区别吗
IdentityHashMap与HashMap的区别
除了 IdentityHashMap中key可以重合,还有别的区别吗
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 ApiIdentityHashMap
:此类利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。
换句话说,在 IdentityHashMap
中,当且仅当 (k1==k2)
时
才认为两个键 k1 和 k2 相等、在正常 Map 实现(如 HashMap)中
当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1==null ? k2==null : e1.equals(e2))
3 回答2.5k 阅读✓ 已解决
3 回答4k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.7k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
简单说IdentityHashMap与常用的HashMap的区别是:前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2) == true 时才会认为两个key相等。IdentityHashMap 允许使用null作为key和value. 不保证任何Key-value对的之间的顺序, 更不能保证他们的顺序随时间的推移不会发生变化.
IdentityHashMap有其特殊用途,比如序列化或者深度复制。或者记录对象代理。
举个例子,jvm中的所有对象都是独一无二的,哪怕两个对象是同一个class的对象,而且两个对象的数据完全相同,对于jvm来说,他们也是完全不同的,如果要用一个map来记录这样jvm中的对象,你就需要用IdentityHashMap,而不能使用其他Map实现。