为什么重写equals时一定要重写hashCode?
首先默认的 equals 方法的是实现,比较两个对象的地址值,相同就是 true,反之就是 false
默认的 hashCode 方法(主要用来计算哈希值的方法,有了哈希值就可以到哈希表中快速定位到对象的位置)是根据当前对象的地址值来计算出一个哈希值并返回。
但是 equals 方法,更多是用来比较两对象的内容是否相同,所以就要重写,重写之后就是内容相同的两对象就返回 true,但是在没有重写的 hashCode 方法中,就会生成两个不同哈希码。在Java中,哈希表使用哈希码来确定存储对象的位置。如果两个相等的对象具有不同的哈希码,那么它们将被存储在哈希表的不同位置,导致无法正确查找这些对象。举例说明 set 集合,这个要求元素不能重复,p1 和 p2 内容相等,如果不重写,p1 和 p2 就可能同时存到 set 集合中(set 集合判断重复,查找元素底层是要涉及哈希表和 hashCode 函数的),重写一般可以根据内容来计算哈希值,这样二者得到的哈希值就一样了,也就不会出现上述问题了。
为什么重写了equal方法,一定要重写hashCode方法?
于 2024-11-30 03:07:09 首次发布