Ein Mechanismus für unterschiedliche Gleichungen (physische Gleichungen und logische Gleichungen) für Objekte in der Sammlung

Gibt es einen Equalator-Mechanismus wie Comparator, so dass ich für Kopierlisten unterschiedliche Gleichungen haben kann?

BEARBEITEN: Mein Ziel ist es, zwischen aktuellen list1.equals (list2) zu unterscheiden, die prüfen, ob es sich um eine flache Kopie handelt, oder auch um eine tiefe Kopie mit allen Objekten a.equals (b) und list1.identical (list2), die prüfen, ob es sich um eine einfache flache Kopie handelt, die unverändert ist Auflistung

Alle diese Listen stammen vom selben Modell. Einige sind Kopien von sich selbst, sodass sie den Zeiger auf dieselben Objekte enthalten, und andere sind tiefe Kopien, sodass die Hierarchie vollständig repliziert wird, da sie Aktualisierungen im Inhalt und nicht nur in der Struktur aufweisen.

Ich finde mich oft dabei, list1.equals (list2) zu erstellen, aber ich brauche einen Mechanismus, um festzustellen, ob es sich bei beiden um GESAMT-Kopien handelt (gleiche Objekte in derselben Reihenfolge für Sammlungen) oder manchmal um LOGISCHE Kopien (durch meine eigene implementierte Logik gleich) würde gleich nennen und Objekte sollten etwas mehr als a == b implementieren.

Mein Problem ist, dass es keine Equalator-Schnittstelle gibt, und wenn ich Objekte gleich überschreibe, verliere ich die Fähigkeit zum Vergleichen mit TOTAL EQUAL (a == b).

Zum Beispiel wäre das schön;

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

und dennoch könnte ich list1.equals (list2) machen, so dass sie Standardgleichungen (obj1 == obj2) verwenden, und dies wäre nur wahr, wenn enthaltene Objekte genau gleich sind.

Der erste Vorgang ist nützlich, um zu überprüfen, ob die Liste (die eine aktualisierte Liste mit vollständig neu erstellten Objekten aus dem Modell sein kann) immer noch der alten Liste entspricht.

Die zweite Operation ist nützlich, um zu überprüfen, ob die Liste (die eine flache Kopie der alten aktuellen Version des Datenmodells war) keine transzendenten Änderungen enthält, die durch das Verschieben innerhalb des Codes verursacht wurden, als es sich um die udpdated-Version handelte.

BEARBEITEN: Ein sehr gutes Beispiel wäre eine Liste von Punkten (x, y). Wir sollten wissen können, ob beide Listen gleich sind, weil sie genau die gleiche Menge von Punkten sind oder weil die Punkte, die sie enthalten, auf logische Weise gleich sind. Wenn wir sowohl phyEqual als auch logEqual to object implementieren könnten und beide Methoden in einem beliebigen Objekt haben könnten, dann list.phyEqual (list2) oder list1.logEqual (list2)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage