[size=14.399999618530273px]结果如下: X:01,GetHashCode:01
X:02,GetHashCode:02
X:03,GetHashCode:03
X:04,GetHashCode:04
X:05,GetHashCode:05
X:06,GetHashCode:06
X:06,GetHashCode:06
->Equals:06,06
X:06,GetHashCode:06
->Equals:06,06
X:06,GetHashCode:06
->Equals:06,06
X:06,GetHashCode:06
->Equals:06,06
X:07,GetHashCode:00
X:14,GetHashCode:00
->Equals:07,14
X:21,GetHashCode:00
->Equals:14,21
->Equals:07,21
X:28,GetHashCode:00
->Equals:21,28
->Equals:14,28
->Equals:07,28
X:35,GetHashCode:00
->Equals:28,35
->Equals:21,35
->Equals:14,35
->Equals:07,35
共11条不重复数据
GetHashCode:调用15次,Equals:调用:14次!
[size=14.399999618530273px]总结:
[1]分为三种情况
A:Hash码不同,值不同.
GetHashCode执行1次,Equals未调用.
B:Hash码相同,值相同.
GetHashCode执行1次,Equals调用0次(首个)或1次(余下).
C:Hash码相同,值不同.
GetHashCode执行1次,Equals调用0次(首个)1次(第2)....n-1次(第n)
C:Hash码不同,值相同.
不允许存在这种情况
[2]GetHashCode的执行效率
完全散列:O (1)
完全不散列:O (n*n)
[3]GetHashCode自动调用Equals
这又是一个编译器魔法,
GetHashCode是在冲突的情况下才去调用Equals
如果GetHashCode设计的足够好,可以极大提高查询效率.
[4]GetHashCode的正确性保障
-----------正确情况--------------
GetHashCode相同,Equals必相同(重码)
GetHashCode不同,Equals可相同(不充分散列,效率低)
GetHashCode不同,Equals不相同(充分散列)
-----------错误情况--------------
GetHashCode相同,Equals不相同(导致不可预料的错误)
|