hashcode和equals
来源:14-3 Java中的 hashCode 方法
30K必胜
2019-01-12
通过这门课程,让我想明白了一个道理,就是java的复合类型中为什么要有hashcode和equals这两个方法?它们的存在意义是什么?
是因为,要想把复合类型存储进hash表中,是必须要计算hash表的索引,拿到了索引才能将这个复合类型放进去,而索引的计算的前提就是要拿到hashcode;
两个复合类型的内容是否相等不能单纯的依靠hashcode,因为它们的侧重点不同,hashcode是用来计算这个复合类型在哈希表中的存储位置,而equals是为了判断这两个复合类型的内容是否相等,所以说hashcode相同并不能代表这两个对象的内容是相同的,例如,ZHANG和zhang是否相等?对于hashcode来说,它们可以得到相同的hashcode,这完全取决于hashcode的计算标准,但是对于内容来说又是另一套判断标准,我们希望大小写敏感,那么ZHANG和zhang就不相等了;
所以说,hashcode和equals,它们描述的是两个侧重点,这就让我们在编程中注意了,当比较这两个复合类型内容是否相等的时候,一定要用equals。
3回答
-
凌子祺
2020-03-03
感谢!解惑了。之前的疑问一直是,为什么在equals里面不直接return两个hashCode是否相等就可以。
在你这看到了解答。
00 -
_潇潇暮雨
2019-08-21
其实我感觉hashCode只有在存储hash表中会用到,从语言的设计角度来讲是不是应该向Compareable接口那样设计一个Hashable接口,而不是所有的类都有hashCode方法。
012019-08-22 -
liuyubobobo
2019-01-12
大赞!:)
感谢分享:)
继续加油!:)
052020-03-04
相似问题