关于hascode和equals要同时重写的问题

首先我们都知道Set集合是不能有重复的,那么怎么能保证不能被放入重复的元素呢,一般情况我们用equals一个一个比较,但是如果集合数据很大比如100000个,那我放入一个数据就要用equals比较100000次,这样就很浪费资源。所以hashcode就出现了,它相当于一个身份证,将对象数据根据该对象的特征使用特定的算法将其定义到一个地址上,那么在后面定义进来的数据只要看对应的hashcode地址上是否有值,那么就用equals比较,如果没有则直接插入,只要就大大减少了equals的使用次数,执行效率就大大提高了。为了保证是同一个对象,所以在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),但hashcode确实不相同的。最后会导致Set集合出现元素相同的情况。

posted @ 2018-08-13 17:24  我有点秃页  阅读(218)  评论(0编辑  收藏  举报