为什么重写equals()方法要覆盖hashCode()方法
2021-04-18 00:31:50 4 举报
为什么重写equals()方法要覆盖hashCode()方法
作者其他创作
大纲/内容
两个不同的对象,key相同(编程中就是根据key是否相同来判断这两个对象是否相同),但是因为地址不同,所以生成的hashCode不同,所以无法通过hashCode判断key是否相同
hashCode
key = “peile”
equals()方法在Object中用的是==对比的是地址,所以要以对象某某个属性判断对象是否相等需要重写equals()方法。
hsahCode()的时间复杂度为O(1),而equals()需要对比类型和value两次对比,所hashCode()性能比equals()高。一般先判断hashCode是否相同,如果不相同则一定key不相同,如果相同则再用equals()方法。
那么为什么还需要覆盖hashCode方法呢?hashCode()方法只有在集合中会使用到,比如HashMap就会用hashCode判断key相同的元素是否已经存在于集合中,如果通过地址的方式生成hashCode,那么就无法通过key生成的hashCode是否相同来判断key是否存在了,所以,如果对象需要存储在集合中的话就需要覆盖hashCode()方法,让相同的key生成的hashCode相同。
重写hashCode()方法,用key生成hashCode所以可以用hashCode判断两个对象的key是否相同。
hashCode(key)
hashCode(地址)
0 条评论
回复 删除
下一页