tor*_*omp 2 java logic equals hashcode
我有一个作为唯一标识符的对象,它有两个参数,我们将它们称为A和B,并具有以下逻辑:
当且仅当以下情况时,obj1等于obj2:
obj1.A is equal to obj2.A
Run Code Online (Sandbox Code Playgroud)
要么
obj1.B is equal to obj2.B
Run Code Online (Sandbox Code Playgroud)
如何为此对象计算合同上令人满意的hashCode()?我是不是坚持做"总是回归0"这个非常低效的解决方案?不知道在这里做什么样的数学运算
Den*_*ret 11
你的equals方法不是传递性的.它不尊重其中一个基本原则:
equals方法在非null对象引用上实现等价关系:
它是自反的:对于任何非空引用值x,x.equals(x)应该返回true.对称性:对于任何非空的参考值x和y,x.equals(y)的应返回true,当且仅当y.equals(x)返回真.
它是传递性的:对于任何非空引用值x,y和z,如果x.equals(y)返回true而y.equals(z)返回true,则x.equals(z)应返回true.
它是一致的:对于任何非空引用值x和y,x.equals(y)的多次调用始终返回true或始终返回false,前提是不修改在对象的equals比较中使用的信息.对于任何非空引用值x,x.equals(null)应返回false.
这种"相等"逻辑使你的对象不适合作为键,你不能通过简单地设计一个hashCode方法来解决这个问题,
不要将它作为一种equals方法,而是使用您自己的语义,例如isEquivalentTo.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |