hashcode()与equals()

hashcode()与equals()

hashcode优点

  1. hashcode比equals效率高,但是相对来说准确性低,因为不同的对象生成的hashcode也可能是相同(生成hash值得公式可能存在的问题)
  2. 通过hashCode可以很快的查到小内存块

hashcode()与equals()区别

  1. equals()相等的两个对象他们的hashCode()肯定相等
  2. hashCode()相等的两个对象他们的equals()不一定相等()
  3. 为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等?

 因为是按照hashCode来访问小内存块,所以hashCode必须相等。

HashMap获取一个对象是比较key的hashCode相等和equals为true。

之所以hashCode相等,却可以equal不等,就比如ObjectA和ObjectB他们都有属性name,那么hashCode都以name计算,所以hashCode一样,但是两个对象属于不同类型,所以equals为false。

  1. 同一个类new两个对象,它的hashcode是不一样的,返回的是当前对象的地址

需要重写生成hashcode的方法,重写方法https://blog.csdn.net/zzg1229059735/article/details/51498310
5.为什么重写equals就要重写hashcode,因为当把两个比较数中的其中一个作为key放入hashset、hashTable、hashMap中,然后用另一个值去查找,那么是查找不到的(为何要重写equals:https://zhidao.baidu.com/question/326597100.html

原文地址:https://www.cnblogs.com/xwx20160804/p/11719656.html