equals()和hashCode()是否应该返回相同的结果



我的意思是,如果两个元素相等((,我是否有义务让它们也有相同的hashCode((?如果我不那样做,会出什么问题?

我想到的第一件事是,在ArrayList中,2个元素可以是"相等"的,但在HashSet中不能。允许这种行为是不好的做法吗?除了在其中使用contains((之外,它还会产生什么问题?

如果根据equals(Object(方法,两个对象相等,则对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode((

可能出了什么问题?好吧,因为哈希码比较可能比全对象比较更快,所以通常只有当哈希码相等时才会进行全比较。因此,如果您的hashCode函数被破坏,那么您的相等性也将被破坏。

最新更新