码迷,mamicode.com
首页 > 其他好文 > 详细

hashcode() 和 equals() 的作用 区别 联系

时间:2020-06-28 22:20:07      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:可靠   使用   方法   hashcode   shc   str   情况下   数据   equal   

hashCode() 和 equals() 方法的作用其实一样, 都是用来对比两个对象是否相等, 都需要自己去覆写来提高对比效率和准确度, 在向 hashSet, hashMap 等底层用 hash值 判断的集合中存值时, 被存储的对象都需要覆写这两个方法.

hashCode() 方法返回一个哈希值, 可以用作对比对象, 不同的对象所产生的哈希值不同, 但并不唯一, 它是通过 hash 函数(一种算法)得到的, 同一个类的对象按照自己不同的特征尽量的有不同的哈希值, 但不表示不同的对象哈希值完全不同.

equals() 方法返回一个 boolean值, 在不进行覆写的情况下会直接对比对象的内存地址, 在覆写的情况下则会根据覆写的对比规则进行对比.

既然 hashCode() 和 equals() 都是用来对比对象是否相等的, 那什么时候使用 hashCode(), 什么时候使用 equals() 呢?

首先 equals() 方法的对比规则是由自己去覆写的, 对比规则相对复杂全面, 所以导致效率较低, 而 hashCode() 则直接去用其生成的 hash值 进行比较, 效率很高, 但是 hash值 并不是完全可靠, 有时不同的对象生成的 hash值 也会相同, 所以可以得出结论: 在覆写 equals() 方法时, 也会同时覆写 hashCode() 方法, 每当需要对比的时候, 先用 hashCode() 去对比, 如果 hashCode() 不同, 则表示这两个对象肯定不相同, 所以就不需要再用 equals() 进行对比. 如果 hashCode() 相同, 那再去用 equals() 进行比较, 如果 equals() 也相同, 那表示这两个对象是真的相同了. 这样在大大提高数据对比效率的同时也保证了对比的准确性.

hashcode() 和 equals() 的作用 区别 联系

标签:可靠   使用   方法   hashcode   shc   str   情况下   数据   equal   

原文地址:https://www.cnblogs.com/lk13227/p/13205211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!