整数对添加到hashset java [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我将整数对类设置如下:

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

java hashset
3个回答
6
投票

你必须做两件事:

  1. 覆盖equals()
  2. 覆盖hashCode()

正如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();
    }
}

2
投票

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

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


2
投票

你应该覆盖类的hashCodeequals方法,以使其工作。这样做是为了纪念hashCode并等于Java中对象的契约。

© www.soinside.com 2019 - 2024. All rights reserved.