gpt4 book ai didi

java - 为 OR 逻辑计算 hashCode

转载 作者:行者123 更新时间:2023-12-03 23:14:53 24 4
gpt4 key购买 nike

我有一个用作唯一标识符的对象,它有两个参数,我们称它们为 A 和 B,并且具有以下逻辑:

obj1 等于 obj2 当且仅当:

obj1.A is equal to obj2.A

obj1.B is equal to obj2.B

我怎样才能为这个对象计算一个契约(Contract)上令人满意的 hashCode()?我是否坚持执行“始终返回 0”的极其低效的解决方案?不确定在这里做什么样的数学

最佳答案

您的equals 方法不可传递。它不尊重 basic principles 之一:

The equals method implements an equivalence relation on non-null object references:

It is reflexive: for any non-null reference value x, x.equals(x) should return true. It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.

It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.

It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified. For any non-null reference value x, x.equals(null) should return false.

这种“相等”逻辑使您的对象不适合作为键,您无法通过简单地设计一个 hashCode 方法来解决这个问题,

不要将其设为 equals 方法,而是使用您自己的语义,例如 isEquivalentTo

关于java - 为 OR 逻辑计算 hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15791498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com