如何比较STL数据结构中的对象
How to compare objects in STL data structure
(这个问题属于 java)
我试着四处寻找这个……得到了一些部分答案,但没有什么能真正帮助我。
如果我有一个 class 对,其中有 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
您只需为您的对 class 覆盖 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 文档。
(这个问题属于 java) 我试着四处寻找这个……得到了一些部分答案,但没有什么能真正帮助我。 如果我有一个 class 对,其中有 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
您只需为您的对 class 覆盖 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 文档。