java – 维护特定条件的hashCode契约,equals()取决于两个整数
我有一个基本的结构类:
class Employee { int eId; String eName; Employee(int id,String name) { this.eId= id; this.eName= name; } 如果满足以下任何条件,则equals()应返回true: > eId是一样的. 我在覆盖equals()时没有问题,但是,为了维护哈希代码契约,我也应该覆盖hashCode().因此,hashCode应该依赖于eId和eName.length()(如果eNames相等,它们的长度也将相等).所以有四种情况: Employee e1 = new Employee(4,"John"); Employee e2 = new Employee(3,"Jane"); Employee e3 = new Employee(4,"Jim"); Employee e4 = new Employee(7,"Random"); hashCode()应返回e1,e2和e3的相同值以及e4的不同值.我无法想出满足这一要求的逻辑. 这是确切的问题:
解决方法
你遇到了麻烦,因为你的平等概念是不一致的.具体来说,它不是传递性的,
.equals() 的合同要求.
根据您的定义,e1等于e2和e3,但e2不等于e3.这与Java的平等概念不相容.这也是您在定义合理的.hashCode()实现时遇到麻烦的原因. 但是,您可以做的是定义自定义 如果由于某种原因无法使用单独的Comparator,那么您的Employee对象将基本上不一致,即使您应该实现“可行”的.hashCode(),也会出现问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |