一、hashCode()和equals()是什么?
hashCode()方法和equals()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致。
二、hashCode()和equals()的区别
1.性能区别
因为重写equals()里面一般比较全面也比较复杂,所以equals()的效率就比较低,而利用hashCode()进行对比,只需要生成一个hash值就可以了,效率很高。
2.可靠性
可能大家会有一个疑问,为什么hashCode()效率高,还要用equals()呢?
因为hashCode()并不完全可靠,有时候不同的对象生成的hashcode也会一样,所以说hashCode()方法并不完全可靠,所以可以得出以下两条结论:
(1)equals()方法相等的两个对象,他们由hashCode()生成的对象也一定相等。
(2)hashCode()方法得出hashcode相等的两个对象,采用equals()方法比较不一定相等。
三、hashCode()和equals()使用的注意事项
1、对于需要大量并且快速的对比的话如果都用equals()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equals()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
2.在一些hash容器中有时会需要大量且快速的对比一些对象是否相等,比如hashSet要求容器中的对象不重复,那么它就是采用的先进行hashCode()方法比较hashcode值,如果hashcode值相等再进行equals()进行比较,这样对比效率就会提高很多。
3.hashCode()和equals()都是Object中的方法,与equals()方法一样在Object中只是返回当前对象的地址。那么如果在一个类中new了两个一样的对象,那么他们的地址不同,同样所获得的hashcode值也不同。如果我们想要获得唯一的hashcode值,那么就要重写hashcode方法。