我有两套:
Set<Attribute> set1 = new HashSet<Attribute>(5);
Set<Attribute> set2 = new HashSet<Attribute>(5);
//add 5 attribute objects to each of them. (not necessarily the same objects)
assertEquals(set1,set2); //<--- returns false, even though
//the added attribute objects are equal
Run Code Online (Sandbox Code Playgroud)
根据我的要求,覆盖了属性的equals方法:
public abstract class Attribute implements Serializable{
public int attribute;
public abstract boolean isNumerical();
@Override
public boolean equals(Object other){
if(!(other instanceof Attribute)){
return false;
}
Attribute otherAttribute = (Attribute)other;
return (this.attribute == otherAttribute.attribute &&
this.isNumerical() == otherAttribute.isNumerical());
}
}
Run Code Online (Sandbox Code Playgroud)
在调试时,甚至没有调用equals方法!
有任何想法吗?
Jon*_*eet 13
您没有覆盖hashCode(),这意味着将使用默认实现.在调用之前首先HashSet检查匹配的哈希码- 这就是它如何有效地找到潜在匹配的方法.(很容易"整理"一个整数.)equals
基本上,您需要以hashCode与您的equals方法一致的方式覆盖.
| 归档时间: |
|
| 查看次数: |
4946 次 |
| 最近记录: |