Mechanizm mający różne równe (fizyczne równe i logiczne równe) obiektom w kolekcji

Czy istnieje jakikolwiek mechanizm Equalatora, taki jak Komparator, więc mogę mieć różne równania dla list kopiowania?

EDYTOWAĆ: Moim celem jest rozróżnienie między bieżącą listą1. Równości (lista2), która sprawdza, czy jest płytką kopią, a także głęboką kopią ze wszystkimi obiektami a.equals (b) i list1.identical (list2), które sprawdzają, czy jej po prostu płytka kopia z niezmodyfikowaną wymienianie kolejno

Wszystkie te listy pochodzą z tego samego modelu. Niektóre z nich są kopiami samych siebie, więc trzymają wskaźnik na tych samych obiektach, a inne są głębokimi kopiami, więc hierarchia jest całkowicie replikowana, ponieważ zawierają aktualizacje treści, nie tylko w strukturze.

Często znajduję się w makiecie list1.equals (list2), ale potrzebuję mechanizmu informowania, czy oba są TOTALNYMI kopiami (te same obiekty w tej samej kolejności dla kolekcji), czy czasami są kopiami LOGICZNYMI (za pomocą mojej własnej zaimplementowanej logiki równej), więc wymień wywoła równe, a obiekty powinny zaimplementować coś więcej niż a == b.

Mój problem polega na tym, że nie ma interfejsu Equalator, a jeśli nadpisuję obiekty równe, tracę możliwość porównywania przez TOTAL EQUAL (a == b)

Na przykład byłoby miło;

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());
    }
});

i nadal mogę zrobić list1.equals (list2), więc używają domyślnych equals (obj1 == obj2) i byłoby to prawdą tylko wtedy, gdy zawarte obiekty są dokładnie takie same.

Pierwsza operacja jest przydatna do sprawdzenia, czy lista (która może być zaktualizowaną listą z całkowicie odtworzonymi obiektami z modelu) jest nadal równa starej liście.

Druga operacja jest przydatna do sprawdzania, czy lista (która była płytką kopią starej aktualnej wersji modelu danych), nie zawiera żadnej transcendentnej zmiany od przeniesienia jej wewnątrz kodu, gdy była to wersja udpdated.

EDYTOWAĆ: Bardzo dobrym przykładem może być lista punktów (x, y). Powinniśmy wiedzieć, czy obie listy są równe, ponieważ są dokładnie tym samym zbiorem punktów lub równe, ponieważ punkty, które zawierają, są równe w logiczny sposób. Gdybyśmy mogli zaimplementować zarówno phyEqual, jak i logEqual do obiektu, i mieć obie metody w dowolnym obiekcie, więc list.phyEqual (list2) lub list1.logEqual (list2)