细读源码之IdentityHashMap

  • Post author:
  • Post category:其他


应该有很多人不知道IdentityHashMap的存在,包括作者本人,也从来没有在日常工作中使用过它。

实际上IdentityHashMap是Jdk自带的集合类,可以在一些特定的场景下使用。

相比HashMap而言,IdentityHashMap的结构更简单,更容易维护。

本文将从以下几个方面讲解:

1. Java中与Hash相关的操作

2. IdentityHashMap使用举例

3. IdentityHashMap和HashMap对比

4. IdentityHashMap源码分析

5. IdentityHashMap使用场景


1、Java中与Hash相关的操作


A.等于(==)操作

JAVA中的==操作符是来判断两个对象是否是同一个对象,返回结果通过下面三条规则进行确定:

1.对于两个空对象x == null并且y == null,则x == y返回true;

2.对于两个非空对象x,y,当且仅当x和y引用同一对象时,x == y才返回true;

3.对于空对象x和非空对象y,或者非空对象x和空对象y,x == y都返回false。

==操作强调的是,两个对象是否引用同一对象,更通俗的说,引用的对象在堆内存中地址是否相同。


B.equals比较

equals方法用来判断其他对象是否“等于”此对象,注意这里的等于是加了引号的,以区别上面讲解的”==”。equals强调的是逻辑上的相等,不要求比较的两个对象必须是同一对象,equals方法的实现要必须要满足以下几个特性:



1.自反性

对于任何非空的引用对象x,x.equals(x)应该返回true;



2.对称性

对于任何非空的引用对象x和y,当且仅当y.equals(x)返回true时,x.equals(y)才能返回true;



3.传递性

对于任何非空引用对象x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也必须返回true;



4.一致性

对于任何非空的引用对象x和y,在equals中比较的字段没有被修改的前提下,任意多次调用x.equals(y)始终返回true或false;



5.null值处理

对于任何非空引用值x,x.equals(null)应返回false。

需要注意,当重写了hashCode方法时,通常都需要重写equals方法,以维护hashCode的约定:x.equa



版权声明:本文为Mssyaa原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。