Java:hashcode与equals的联系
- == :
Java中 == 比较基础数据类型时是判断两个值是否相等,在判断引用类型时是判断两个引用变量是否指向同一个实列。 - equals():
该方法方法客观上应该是对 == 的补充,在类中override该方法可以加入自定义的判断的逻辑。
如String.equals(),当两个字符串的长度和对应位置上的字符都相等时,则返回true。
再说哈希表,这个数据结构根据输入值key,算出一个输出值value。value在Java中就是hashcode()的返回值,可以理解为一个内存位置。
比如向HashSet中添加一个实例或者查询某个实例是否存在时,拿到目标元素的hashcode(),去对应内存位置查看,若没有内存占用,则表示该元素之前不存在在HashSet中。
若存在内存占用,则需要进一步检查,这时实现原理是使用equals()对冲突处的所有元素判定,看新元素是否已在HashSet中。
所以对应于哈希表的设计初衷,
在Java中只要equals()的实例(理解为同一个key),其hashcode()应该是一样的
同理,不是equals()的实例也有可能hashcode()相同(不同的key可能得到相同的value)
因此,当重写了equals()时,也应确保hashcode()的一致性