我有这个存储int对的类:
static class IntPair {
int a; //JugsNode.a.content;
int b; //JugsNode.b.content;
public IntPair(int a, int b) {
this.a = a;
this.b = b;
}
}
和一个定义如下的集合:
static HashSet<IntPair> confs = new HashSet<IntPair>();
现在,它非常简单,我如何检查特定IntPair p
对象是否已包含在此集合中,而没有引用它但仅包含其值?更清楚:
IntPair p = new Pair(0, 0);
confs.add(p);
IntPair p1 = new Pair(0, 0);
confs.contains(p1);
显然,最后一次通话会返回false
。那么,如何通过仅包含其值来检查该对是否被包含。
答案 0 :(得分:6)
您需要覆盖equals
和hashCode
。
static class IntPair {
int a;
int b;
@Override
public boolean equals(Object other){
if(other==null) return false;
if(!(other instanceof IntPair)) return false;
IntPair o=(IntPair) other;
return this.a==o.a && this.b==o.b;
}
@Override
public int hashCode(){
return 31*a+b;
}
}
答案 1 :(得分:1)
覆盖hashCode()
个对象的equals()
和IntPair
方法。
例如,您可以尝试如下
@Overrid
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof IntPair)) return false;
IntPair intPair = (IntPair) o;
if (a != intPair.a) return false;
if (b != intPair.b) return false;
return true;
}
@Override
public int hashCode() {
int result = a;
result = 31 * result + b;
return result;
}
答案 2 :(得分:1)
根据文档Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null : o.equals(e)).
您必须覆盖equals
和hashCode
方法