java - 如何比较 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
解决方案
您只需要为您的 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 文档。
推荐阅读
- java - The method gettext() is undefined for the type list webelement
- python - 按给定索引处的元素对列表中的元组进行排序和访问
- typescript - 有趣的行为:对象字面量只能指定已知属性
- c# - 我如何获得消息中提到的 Discord 成员并授予他角色?
- python - 在 for 循环中迭代 Python 中 Seaborn kdeplot 中的颜色
- javascript - 编写不和谐机器人时的权限问题
- javascript - React:如何仅渲染可见元素
- php - 如何将与 php 中的 html 表单中的字符串相同的图像发送到服务器或作为对 API 的请求
- android - 在颤振中使用流生成器时,我不断收到轻微的空错误
- javascript - 如何将不可点击的纯文本 URL 转换为 HTML 源中的链接