[关闭]
@frank-shaw 2015-10-29T02:36:40.000000Z 字数 517 阅读 1704

hashCode()方法与equals()方法的联系

java.基础知识


hashCode()方法与equals()方法的联系

本质上讲,hashCode()方法只有在集合Set或者Map中才会用到,因为Set中不允许集合内的元素相同,这个时候就需要查找并比较(Map中不允许key相同,原理一样)。这个时候,就需要通过hash表来实现查找,同样的,在比较的时候,就需要使用hashCode()方法来比较。我们通过hash表的处理地址冲突的方式就可以知道(开放地址法,链地址法,再散列函数法,很多情况下使用的是链地址法),不可能说保证每个元素的hashCode()得到之后都是不同的,假如经过hashCode相同的时候,就需要比较各个元素的值是否相同,这个时候使用的就是equals()方法了。

下面这个图体现的就是这个过程:
hashCode-equals
值得注意的是,这里有个小细节需要优化一下,当hashCode()得到的值相等时,会比较当前需要放入集合的对象与各个hashCode()相等的对象做比较是否相等,不需要和全集中的每一个元素作比较。这样可以节省时间。

更进一步,在集合的对象是自定义的时候,我们需要重写这两个方法,让他们符合我们判断集合元素是否相等的标准。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注