Механизм наличия разных равных (физических и логических равных) для объектов в Коллекции

Есть ли какой-нибудь механизм эквалайзера, такой как Comparator, чтобы у меня были разные эквалайзеры для копировальных списков?

EDIT: Моя цель - провести различие между текущим list1.equals (list2), который проверяет, является ли он мелкой копией или также полной копией со всеми объектами a.equals (b) и list1.identical (list2), который проверяет, является ли его просто мелкой копией с неизмененным список

Все эти списки от одной модели. Некоторые являются копиями самих себя, поэтому они содержат указатель на одни и те же объекты, а другие являются глубокими копиями, поэтому иерархия полностью реплицируется, поскольку у них есть обновления в содержании, а не только в структуре.

Я часто нахожу себя makin list1.equals (list2), но мне нужен механизм для определения того, являются ли оба ПОЛНЫЕ копии (одни и те же объекты в том же порядке для коллекций) или иногда они являются ЛОГИЧЕСКИМИ копиями (через мои собственные реализованные логические равенства), поэтому список вызовет 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), чтобы они использовали значения по умолчанию (obj1 == obj2), и это было бы верно только в том случае, если содержащиеся объекты точно такие же.

Первая операция полезна для проверки того, что список (который может быть обновленным списком с полностью воссозданными объектами из модели) по-прежнему равен старому списку.

Вторая операция полезна для проверки, если список (который был поверхностной копией старой текущей версии модели данных), не содержит каких-либо трансцендентных изменений от перемещения его внутри кода, когда он был обновленной версией.

EDIT: Очень хорошим примером будет список точек (x, y). Мы должны быть в состоянии знать, равны ли оба списка, потому что они точно одинаковы или равны, потому что содержащиеся в них точки логически равны. Если бы мы могли реализовать как phyEqual, так и logEqual для объекта, и иметь оба метода в любом объекте, то есть list.phyEqual (list2) или list1.logEqual (list2)

Ответы на вопрос(2)

Ваш ответ на вопрос