关于hascode和equals要同时重写的问题
Posted freakkkkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于hascode和equals要同时重写的问题相关的知识,希望对你有一定的参考价值。
首先我们都知道Set集合是不能有重复的,那么怎么能保证不能被放入重复的元素呢,一般情况我们用equals一个一个比较,但是如果集合数据很大比如100000个,那我放入一个数据就要用equals比较100000次,这样就很浪费资源。所以hashcode就出现了,它相当于一个身份证,将对象数据根据该对象的特征使用特定的算法将其定义到一个地址上,那么在后面定义进来的数据只要看对应的hashcode地址上是否有值,那么就用equals比较,如果没有则直接插入,只要就大大减少了equals的使用次数,执行效率就大大提高了。为了保证是同一个对象,所以在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),但hashcode确实不相同的。最后会导致Set集合出现元素相同的情况。
以上是关于关于hascode和equals要同时重写的问题的主要内容,如果未能解决你的问题,请参考以下文章
JavaSE——为什么重写equals的同时一定要重写hashCode?
JavaSE——为什么重写equals的同时一定要重写hashCode?
Hibernate中用到联合主键的使用方法,为何要序列化,为何要重写hashcode 和 equals 方法