Все, что вам нужно сделать, это определить произвольный стабильный порядок. (Ваше «время рождения объекта»
одна такая идея, но я не думаю, что она хранится).
Method1:
Для любых двух объектов одного и того же точного типа вы можете определить такой порядок, сравнивая
их отдельные поля. Если все поля идентичны, объекты равны; если не,
какое-то поле f отличается, и вы можете определить порядок на основе базового типа.
Если у вас есть два объекта с разными типами, просто используйте имя типа, чтобы определить порядок;
тот, чье имя лексикографически меньше, "меньше чем". Вы можете реализовать сравнение по типу
(может быть, много работы), или вы можете реализовать общее сравнение использует отражение
перечислять имена и типы полей (чтобы включить сравнения по типам), хотя это может
будь довольно медленным.
Method2:
Каждый раз, когда вы вызываете свой компаратор, кэшируйте любой объект, который еще не встречался в линейном массиве.
Любые сравниваемые объекты теперь имеют индексную позицию в массиве; o1
method3:
Если вы работаете с определенным подмножеством объектов, и есть канонический
связующее дерево, затем нумеруйте каждый край связующего дерева так, чтобы дочерние дуги
иметь уникальные номера. Тогда o1