为什么重写 equals 时必须重写 hashcode?

1,715 total views, 3 views today

equals 默认是和==一样,判断引用是否相等的,一般需要覆写后才能实现真正的判等。

如果认为两个对象是 equal 的,那么最好使得这两个对象的 hashCode 值也是相等的,因为在往 Set 中加对象的时候,会首先用到对象的 hashCode 值。

往 HashSet 中加对象的时候,如下面的流程图:

它先根据 hashCode 来判断对象是否不相等,只要是不相等,HashSet 就认为他们肯定不是同一个对象,就可以省去 equals 的调用开销。

如果两个对象 equals 相等,但是 hashCode 不相等,会导致在 HashSet 中认为是两个不相等的对象,两个对象都会被加入到 HashSet,可能会导致程序异常。

因此,确保 equal 的对象拥有相同的 hashcode 是非常有必要的。

原创文章,转载请注明出处!http://www.javathings.top/为什么重写equals时必须重写hashcode/

About: wusq


发表评论

邮箱地址不会被公开。 必填项已用*标注