重写equals方法时为什么要同时重写Hashcode方法

首先equals与hashcode间的关系是这样的:
如果两个对象相同(即用equals比较返回true),那么它们的hashCode值必定要相同,但hashCode相同的比一定equals;

自我的理解:

由于为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那没必要再进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用;

我们都知道java中的List集合是有序的,因此是可以重复的,而set集合是无序的,因此是不能重复的,那么怎么能保证不能被放入重复的元素呢,但靠equals方法一样比较的话,如果原来集合中以后又10000个元素了,那么放入10001个元素,难道要将前面的所有元素都进行比较,看看是否有重复,欧码噶的,这个效率可想而知,因此hashcode就应遇而生了,java就采用了hash表,利用哈希算法(也叫散列算法),就是将对象数据根据该对象的特征使用特定的算法将其定义到一个地址上,那么在后面定义进来的数据只要看对应的hashcode地址上是否有值,那么就用equals比较,如果没有则直接插入,只要就大大减少了equals的使用次数,执行效率就大大提高了。

猜你喜欢

转载自blog.csdn.net/v2020877/article/details/82192370