整数对添加到hashset java

use*_*017 0 java hashset

我将整数对类设置如下:

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中没有重复?

Boh*_*ian 6

你必须做两件事:

  1. 覆盖 equals()
  2. 覆盖 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)