天天看点

1.9 为什么要重写hashcode和equals方法,以及hashcode相同equals是否相同

我们利用hashcode进行比较效率很高,但是用hashcode进行比较并不绝对可靠,因为有的时候不同的对象可能会有相同的hashcode(hash算法的原因),然而重写的equal()一般比较全面比较复杂,所以equals()方法是可靠的,但是对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

这种大量的并且快速的对象对比一般使用在hash容器中,比如hashset,hashmap,hashtable等等,比如hashset里要求对象不能重复,则他内部必然要对添加进去的每个对象进行对比,而他的对比规则就是像上面说的那样,先hashCode(),如果hashCode()相同,再用equal()验证,如果hashCode()都不同,则肯定不同,这样对比的效率就很高了。

参考博客:https://www.cnblogs.com/keyi/p/7119825.html