我试图解决的问题是试图从一个列表中删除“匹配”另一个列表中的数据的数据,其中我将匹配定义为相等在我已经定义的两个属性中。Java - 根据两个对象的数据子集检查相等性
假设对象是一个盒子。它具有字符串大小,颜色和字符串所有者。
我说如果他们有相同的大小和相同的颜色,两个盒子是相等的。请注意,我无法重新定义Box对象,但我想如果需要的话我可以继承它。
如果我的等于的定义是相同的大小,那么我会在O(N)中做一个集合。
Set<String> boxSizes = newHashSet();
for (Box box : boxList1) {
boxSizes.add(box.getSize());
}
for (Box box : boxList2) {
if (boxSizes.contains(box.getSize()) {
// This is a duplicate
}
}
我可以效仿用于检查通过编写一个小班级,以这种方式来实现equals根据大小和颜色平等此相同的解决方案。然而,这种解决方案似乎夸大了这样一个简单的比较。
我也可以从我关心的属性的某些组合中构造出密钥,例如,
boxKeys.add(box.getSize() + box.color.toString());
这可能会奏效,虽然肯定会有一些边缘情况。除了感觉错误之外,我对这个解决方案没有任何有力的论据。
那么,这个操作应该实现什么样的解决方案呢?