Un mecanismo para tener diferentes iguales (iguales físicos y lógicos) en los objetos de la Colección.

¿Hay algún mecanismo de Equalator como Comparator para que pueda tener diferentes iguales para las listas de coparing?

EDITAR: Mi objetivo es diferenciar entre list1.equals actual (list2) que verifica si es una copia superficial o también una copia profunda con todos los objetos a.equals (b) y list1.identical (list2) que verifica si su copia simplemente superficial con no modificada listado

Todas estas listas son del mismo modelo. Algunas son copias de sí mismas, por lo que mantienen el puntero sobre los mismos objetos, y otras son copias en profundidad, por lo que la jerarquía se replica totalmente, porque tienen actualizaciones en el contenido, no solo en la estructura.

A menudo me encuentro haciendo list1.equals (list2) pero necesito un mecanismo para saber si ambas son copias TOTALES (los mismos objetos en el mismo orden para las colecciones) o, a veces, si son copias LÓGICAS (a través de mis propios lógicos implementados iguales), así que haga una lista llamaría iguales y los objetos deberían implementar algo más que a == b.

Mi problema es que no hay una interfaz de Equalator, y si anulo los objetos es igual a perder la capacidad de comparación por TOTAL EQUAL (a == b)

Por ejemplo, esto sería bueno;

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

y aún así podría hacer list1.equals (list2) para que usen los iguales por defecto (obj1 == obj2) y esto solo sería cierto si los objetos contenidos son exactamente iguales.

La primera operación es útil para verificar si la lista (que podría ser una lista actualizada con objetos totalmente recreados del modelo) sigue siendo igual a la lista anterior.

La segunda operación es útil para verificar si la lista (que era una copia superficial de la versión actual antigua del modelo de datos), no contiene ningún cambio trascendente al moverla dentro del código cuando era la versión actualizada.

EDITAR: Un muy buen ejemplo sería tener una lista de Punto (x, y). Deberíamos poder saber si ambas listas son iguales porque son exactamente el mismo conjunto de puntos o igual porque los puntos que contienen son iguales de una manera lógica. Si pudiéramos implementar tanto phyEqual como logEqual para objetar, y tener ambos métodos en cualquier objeto, list.phyEqual (list2) o list1.logEqual (list2)