首页 > 解决方案 > 如何比较 STL 数据结构中的对象

问题描述

(这个问题与java有关)我试着四处寻找这个..得到了一些部分答案,但没有什么能真正帮助我。如果我有一个包含 2 个变量的类对,并将其插入到 HashSet 或 TreeSet 中,我将如何在插入后访问这些元素。前任:

HashSet<Integer>hs=new HashSet<>();
hs.add(new pair(1,2));
hs.get(new pair(1,2));

所以在这里它会抛出一个空指针异常,因为它正在获取一个单独的地址。如何修改数据结构以具有某种比较器,我们可以比较内部的实际元素,例如:a==other.a && b==other.b

标签: javaclassdata-structurescompareutility

解决方案


您只需要为您的 pair 类覆盖 equals 和 hashCode 方法。例如:

class Pair {
    int a;
    int b;

    Pair(int a, int b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public boolean equals(other: Object) {
        if (other == null) { return false; }
        if (other instanceof Pair) {
            Pair otherPair = (Pair)other;
            return a == otherPair.a && b == otherPair.b;
        }
        return false;
    }

    @Override
    public int hashCode() {
        return a * 31 + b;
    }
}

要了解更多信息,请阅读 java.lang.Object 中的 equals 和 hashCode 方法,并阅读 HashSet 文档。


推荐阅读