有比較器的任何Equalator機制,所以我可以有不同的等值用於複製列表嗎?我的目標是區分當前的list1.equals(list2),它檢查它是一個淺拷貝還是一個深拷貝與所有對象a.equals(b)和list1.identical(list2)哪一個檢查它是否與未修改列表中的簡單淺拷貝在Collection中有不同的等於(物理等於和邏輯等於)對象的機制
所有這些列表都來自同一模型。有些是他們自己的副本,所以他們持有指向相同對象的指針,而另一些是深度副本,因此層次結構被完全複製,因爲他們在內容中進行了更新,而不僅僅是結構化。我發現自己經常makin list1.equals(list2),但我需要一種機制來告訴如果兩者都是TOTAL副本(集合相同順序的相同對象),或者有時如果他們是LOGICAL副本(通過我自己實現的邏輯等於),所以列表會調用equals並且對象應該實現比a == b更多的東西。
我的問題是不存在Equalator接口,並且如果我重寫對象等於我鬆由TOTAL相等(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(列表2),因此他們使用默認的equals(OBJ1 == obj2的),如果包含的對象是完全一樣的,這將是唯一的真實。
第一個操作是用於檢查列表(這可能是一個更新的清單,從模型完全重新創建對象)還是等於舊列表非常有用。
第二個操作對於檢查列表(它是舊的當前版本的數據模型的淺表副本)非常有用,它不包含任何在代碼內部移動時發生的超越變化,因爲它是udpdated版本。
編輯:一個很好的例子是有一個Point(x,y)的列表。我們應該能夠知道這兩個列表是否相等,因爲它們是完全相同的一組點或相等的點,因爲它們包含的點在邏輯上是相等的。如果我們可以將phyEqual和logEqual都實現爲對象,並且在任何對象中都有這兩種方法,那麼list.phyEqual(list2)或list1.logEqual(list2)
你有很多的上下文,但是這裏你真正的*問題*是什麼? – 2012-08-01 11:38:57
第一行。然後我定義我的問題。對不起,我從'不存在'開始,而不是'存在',我認爲這就是爲什麼其混淆的 – Whimusical 2012-08-01 11:39:35