我将整数对类设置如下:
public class pair{
int a;
int b;
pair(int p,int q){
this.a=p;
this.b=q;
}
}
Run Code Online (Sandbox Code Playgroud)
当我将它们添加到hashset时,没有重复:
HashSet<pair> set=new HashSet<pair>();
pair temp=new pair(3,5);
set.add(temp);
pair temp1=new pair(3,5);
set.add(temp1);
for(pair p:set){
System.out.println(p.a+" "+p.b);
}
Run Code Online (Sandbox Code Playgroud)
但它给了我这个输出:
3 5
3 5
Run Code Online (Sandbox Code Playgroud)
我应该编辑什么以在hashset中没有重复?
你必须做两件事:
equals()hashCode()正如javadoc hashCode()告诉你的那样,它必须同意equals(),即如果两个对象是等号,它们应该具有相同的hashCode.两个不相等的对象可以使用相同的hashCode,
像这样的东西:
public class pair{
int a;
int b;
pair(int p,int q){
a=p;
b=q;
}
public boolean equals(Object o) {
if (o instanceof Pair) {
Pair p = (Pair)o;
return p.a == a && p.b == b;
}
return false;
}
public int hashCode() {
return new Integer(a).hashCode() * 31 + new Integer(b).hashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3754 次 |
| 最近记录: |