java - 在Java中查找匹配的对象

标签 java matching hashset treemap

我目前正在尝试根据 2 个对象的值来匹配它们。不过,它不是 a.a = a.a,而是 a.a = a.ba.b = b.a。这意味着覆盖 equals 是一种选择,但它肯定不是正确的选择。

虽然对这些对象进行排序将使匹配时间更快,但总体规模较小,因此没有必要。此外,出于与 equals 相同的原因,compareTo 也不完全正确。

我是否可以简单地制定自己的方法以防万一?将有 4 个字段需要匹配,这就是为什么我没有预先使用 if 语句。

public boolean isOpposite(Object other) {
    return (this.a == other.b) ? true : false;
}

该对象也有可能实现/扩展基础对象以采用更多字段并实现自己的匹配方式。

我正在考虑使用LinkedList,因为我知道它比ArrayList使用起来更快,但是我也一直在考虑Map >s。 编辑:更好地解释对象

    public class Obj {     
public String a;     
public String b;     
public String c;     
public double d;    
}

关系如下:

    Obj obj1, obj2;
obj1.a == obj2.b //.equals for String of course
obj1.b == obj2.a
obj1.c == obj2.c
obj1.d == obj2.d * -1

最佳答案

正如您所提到的,覆盖 equalscompareTo 不是正确的方法。因为有一个假设,两种方法都应该是传递的,即 A eq B 和 B eq C => A eq C 但它不适用于“相反”的对象。很高兴知道,因为您无法定义等价类并将其划分为子集,但您需要找到所有对(取决于您的用例)。

不确定,您的目标是什么。如果你有一些包含此类对象的容器,并且需要找到满足条件的所有对,那么恐怕你需要进行 n^2 次比较。

我可能会创建两个哈希集,一个包含原始哈希集,第二个包含相反哈希集,并询问第二个哈希集是否包含原始哈希集每个成员的相反哈希集。

关于java - 在Java中查找匹配的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948443/

相关文章:

c# - 从哈希集中获取随机元素?

java - IntervalTree DeleteNode Java实现

java - 在 Java 中从 Arraylist 内引用父 Arraylist

java - 单击按钮停止 Java 中正在进行的进程(线程)

python - 如何在 python 中使用正则表达式捕获带有千位和小数分隔符的价格

Ocaml模式一次匹配列表中的多个元素

jquery - 删除一个正则表达式中的 2 个(多个)匹配类

c# - 您如何确定两个 HashSet 是否相等(按值,而不是按引用)?

java - 为什么空集(如 {} 中所示)是所有集合的子集? ( java )

java - 无需等待超时即可检查设备是否有 snmp 对象?