hashCode与equals方法的作用其实一样,在java里面我们都是用它们来比较两个对象是否一致。那为和我们还需要使用hashCode?这里其实使用hashCode是为了提高效率,采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的。
hashCode和equals的区别:
1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
为什么重写hashCode还需要重写equals呢?
其实在HashMap中比较两个key是否相等,需要同时使用这两个函数,因为自定义的类的hashCode()方法继承于Object类,其hashCode码是默认的内存地址,也就是说即便是两个相同含义的对象,也是不相等的。HashMap中的比较key是先比较它们的HashCode()是否相等,然后再比较它们的equals,如果都相等那就是相等的。若equals不相等,则认为他们是不相等的。如果只重写了hashcode方法没有重写equals方法,当比较equals的时候那么只是看它们是否是同一个对象而已(就是其内存地址的比较),所以需要两个方法进行重写。HashMap用来判断key是否相等的方法是调用了HashSet判断加入的元素是否相等,重载hashCode()则是为了对同一个key能够等到相同的HashCode,这样子HashMap就可以定位到我们指定的key上,重载equals是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样才能够真正得到key所对应的键值对。