@frank-shaw
2015-10-29T10:36:40.000000Z
字数 517
阅读 1819
java.基础知识
本质上讲,hashCode()方法只有在集合Set或者Map中才会用到,因为Set中不允许集合内的元素相同,这个时候就需要查找并比较(Map中不允许key相同,原理一样)。这个时候,就需要通过hash表来实现查找,同样的,在比较的时候,就需要使用hashCode()方法来比较。我们通过hash表的处理地址冲突的方式就可以知道(开放地址法,链地址法,再散列函数法,很多情况下使用的是链地址法),不可能说保证每个元素的hashCode()得到之后都是不同的,假如经过hashCode相同的时候,就需要比较各个元素的值是否相同,这个时候使用的就是equals()方法了。
下面这个图体现的就是这个过程:
值得注意的是,这里有个小细节需要优化一下,当hashCode()得到的值相等时,会比较当前需要放入集合的对象与各个hashCode()相等的对象做比较是否相等,不需要和全集中的每一个元素作比较。这样可以节省时间。
更进一步,在集合的对象是自定义的时候,我们需要重写这两个方法,让他们符合我们判断集合元素是否相等的标准。