美文网首页
hashcode() 和 equals() 的作用 区别 联系

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

作者: KouKuma | 来源:发表于2020-06-28 21:47 被阅读0次

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() 的作用 区别 联系

      本文链接:https://www.haomeiwen.com/subject/xugwfktx.html