我目前正在尝试根据 2 个对象的值来匹配它们。不过,它不是 a.a = a.a
,而是 a.a = a.b
和 a.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
最佳答案
正如您所提到的,覆盖 equals
或 compareTo
不是正确的方法。因为有一个假设,两种方法都应该是传递的,即 A eq B 和 B eq C => A eq C
但它不适用于“相反”的对象。很高兴知道,因为您无法定义等价类并将其划分为子集,但您需要找到所有对(取决于您的用例)。
不确定,您的目标是什么。如果你有一些包含此类对象的容器,并且需要找到满足条件的所有对,那么恐怕你需要进行 n^2 次比较。
我可能会创建两个哈希集,一个包含原始哈希集,第二个包含相反哈希集,并询问第二个哈希集是否包含原始哈希集每个成员的相反哈希集。
关于java - 在Java中查找匹配的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948443/