有没有像 Comparator 这样的 Equalator 机制,所以我可以有不同的等号来比较列表?
编辑:我的目标是区分当前 list1.equals(list2) 检查它是浅拷贝还是深拷贝所有对象 a.equals(b) 和 list1.identical(list2) 检查它是否只是浅拷贝未经修改的清单
所有这些列表都来自同一模型。有些是自身的副本,因此它们持有指向相同对象的指针,而另一些是深层副本,因此层次结构被完全复制,因为它们在内容上进行了更新,而不仅仅是在结构上。
我发现自己经常制作 list1.equals(list2) 但我需要一种机制来判断两者是否是 TOTAL 副本(相同的对象以相同的集合顺序)或者有时它们是否是 LOGICAL 副本(通过我自己实现的逻辑等于),所以列出会调用 equals 并且对象应该实现比 a==b 更多的东西。
我的问题是没有 Equalator 接口,如果我覆盖对象等于我失去了通过 TOTAL EQUAL (a==b) 进行比较的能力
例如,这会很好;
Collections.equal(l1,l2,new Equalator(){
@Override public boolean equals(Obj1,Obj2){
//Default lists comparison plus commparison of objects based on
return (obj1.propertyX() == obj2.propertyX());
}
});
我仍然可以做 list1.equals(list2) 所以他们使用默认的 equals (obj1==obj2) 并且只有当包含的对象完全相同时才会这样。
第一个操作对于检查列表(可能是从模型中完全重新创建的对象的更新列表)是否仍然等于旧列表很有用。
第二个操作对于检查是否列表很有用(这是旧的当前数据模型版本的浅表副本),它不包含任何超越更改,因为它是更新版本时在代码中移动它。
编辑:一个很好的例子是有一个 Point(x,y) 的列表。我们应该能够知道两个列表是否相等,因为它们是完全相同的一组点,或者是相等的,因为它们包含的点在逻辑上是相等的。如果我们可以同时实现 phyEqual 和 logEqual 到对象,并且在任何对象中都有这两种方法,那么 list.phyEqual(list2) 或 list1.logEqual(list2)