整数对添加到hashset java

时间:2014-06-17 11:43:50

标签: java hashset

我将整数对类设置如下:

public class pair{
    int a;
    int b;
    pair(int p,int q){
        this.a=p;
        this.b=q;
    }
}

当我将它们添加到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);
        }

但它给了我这个输出:

3  5
3  5

我应该编辑什么才能在hashset中没有重复?

3 个答案:

答案 0 :(得分:6)

你必须做两件事:

  1. 覆盖equals()
  2. 覆盖hashCode()
  3. 正如hashCode()的javadoc告诉你的那样,它必须与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();
        }
    }
    

答案 1 :(得分:2)

您需要覆盖类的等于方法,专门查看每对,看看它们是否匹配。

编辑:是的,哈希码方法也必须被覆盖

答案 2 :(得分:2)

您应该覆盖该类的hashCodeequals方法才能使其生效。这样做是为了纪念hashCode并等于Java中对象的契约。