如果两个对象相等,则哈希码必须相同。那为什么要进行任何检查HashMap
-
if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) {
而不是简单
if ((k = e.key) == key || (key != null && key.equals(k)))) {
如果两个对象相等,则哈希码必须相同。
在这种情况下,采用另一种方式:“如果两个对象的哈希码不同,则它们不能相等”
因此,这里我们只是equals()
通过首先比较hash
es来简化比较。
由于hash
是类型的int
,比较2 int
s并不是昂贵的操作(只需使用一条机器指令- if_icmp<cond>
。
另一方面,equals()
用于各种对象的方法可能涉及复杂的操作,当然,与int
比较相比,这使其成为昂贵的操作。因此,我们只是hash
比较比较早的退出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句