我有一个对象的列表,在我们的例子中被称为规则,这个对象本身是一个字段列表,我必须对其进行哈希码比较,因为我们不能在系统中复制规则.
即假设我有两个规则R1和R2,字段为A和B.
现在,如果R1中A和B的值分别为7和2.
在R2中它分别是3和4然后我用来检查系统中规则的重复性的过程是哈希码比较失败
我使用的方法是
for(Rule rule : rules){
changeableAttrCode=0;
fieldCounter=1;
attributes = rule.getAttributes();
for(RuleField ruleField : attributes){
changeableAttrCode = changeableAttrCode + (fieldCounter * ruleField.getValue().hashCode());
fieldCounter++;
}
parameters = rule.getParameters();
for(RuleField ruleField : parameters){
changeableAttrCode = changeableAttrCode + (fieldCounter * ruleField.getValue().hashCode());
fieldCounter++;
}
changeableAttrCodes.add(changeableAttrCode);
Run Code Online (Sandbox Code Playgroud)
这里是changeableAttrCodes,我们存储所有规则的哈希码.
那么请建议我更好的方法,以便将来不会出现这种问题,也可以看出系统中的规则错误.
提前致谢
hashcode()并不意味着用于检查平等.return 42;是一个完全有效的实现hashcode().为什么不在规则对象中覆盖equals()(并且hashcode()就此而言)并使用它来检查两个规则是否相等?您仍然可以使用哈希码来检查需要调查哪些对象,因为两个equal()对象应始终具有相同的哈希码,但这是您可能需要或可能不需要的性能改进,具体取决于您的系统.
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |