Java частично заказал коллекцию <E>
Я ищу реализацию Java структуры данных, которая содержит коллекцию элементов, для которыхчастичный заказ определяется, и который позволяет перебирать эти элементы в некоторыхтопологический порядок (любой из возможных порядков в порядке; предпочтительно стабильный порядок при изменении содержимого коллекции).
В идеале это будет реализовывать,Collection
Set
, или жеSortedSet
интерфейс и поддержка всех методов интерфейса. С точки зрения определения общего порядка, коллекция может быть создана с помощьюComparator
и компаратор может выдать исключение (ClassCastException
?) если два сравниваемых элемента не упорядочены относительно друг друга. В качестве бонуса было бы выброшено исключение, если вставляемый элемент вызовет аномалию упорядочения (цикл в упорядоченном графе элементов).
Так что да, я хочу топологический вид, но я бы хотелобъект коллекции, который поддерживает этот порядок сортировки с каждой вставкой / удалением, аналогично тому, как SortedSet поддерживает коллекцию в отсортированном порядке.
Существует ли что-то подобное? В какой-нибудь библиотеке с открытым исходным кодом?
Рекомендации:
http://en.wikipedia.org/wiki/Partially_ordered_set
http://en.wikipedia.org/wiki/Topological_sorting
Обновить
Я закончил с другим подходом к моей проблеме, где я выигралмне не понадобится сеттинг, после того, как я осознал, как влияют на производительность мои требования (и другие проблемы, которые я не могЯ не могу решить, используя poset). Использование компаратора для определения упорядоченности элементов означает, что для вставки элемента я должен консультироваться с компаратором по каждому существующему элементу, стоимость O (n) на вставку.
Если производительность не очень важна (это так), и если количество элементов ограничено чем-то разумным (это неt), я думаю, я бы использовал подход, предложенный Вилли, хотя, возможно, с моей собственной реализацией графа и топологической сортировкой, чтобы минимизировать зависимости.