hashcode()与equals()
hashcode()与equals()
hashcode优点
- hashcode比equals效率高,但是相对来说准确性低,因为不同的对象生成的hashcode也可能是相同(生成hash值得公式可能存在的问题)
- 通过hashCode可以很快的查到小内存块
hashcode()与equals()区别
- equals()相等的两个对象他们的hashCode()肯定相等
- hashCode()相等的两个对象他们的equals()不一定相等()
- 为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等?
因为是按照hashCode来访问小内存块,所以hashCode必须相等。
HashMap获取一个对象是比较key的hashCode相等和equals为true。
之所以hashCode相等,却可以equal不等,就比如ObjectA和ObjectB他们都有属性name,那么hashCode都以name计算,所以hashCode一样,但是两个对象属于不同类型,所以equals为false。
- 同一个类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)