Существует ли коллекция, которая обеспечивает сортировку, нет дублирующихся элементов и метод subList (index, index)? - PullRequest
3 голосов
/ 24 августа 2011

Мне нужна коллекция, которая не допускает дубликатов, сортируется и поддерживает метод subList(startIndex, endIndex).Существует ли, и если да, то какая коллекция?

TreeMap не имеет дубликатов, имеет сортировку, но не имеет subList(index, index).ArrayList имеет subList(index, index), но может содержать дублированные значения.Есть ли варианты?

Ответы [ 3 ]

2 голосов
/ 24 августа 2011

Я полагаю, что вы ищете что-то, называемое деревом статистики заказов , которое представляет собой сбалансированное двоичное дерево поиска, дополненное дополнительной информацией, так что во время O (log n) вы можете запроситьэлемент по любому индексу.Поскольку это двоичное дерево поиска, оно не допускает дубликатов, а также потому, что вы можете запрашивать элемент в заданной позиции, вы можете эффективно реализовывать поддиапазоны;просто верните новое представление дерева, в котором вы отслеживаете начальный и конечный индексы, поэтому при итерации по дереву вы можете охватить этот конкретный диапазон.

Стандартные библиотеки Java не предоставляют реализацию этогоструктура данных (на самом деле я не знаю ни одного языка, обеспечивающего это).Мне удалось найти (в кеше Google) эту реализацию деревьев статистики заказов, которая содержит два файла:

Надеюсь, это поможет!

2 голосов
/ 24 августа 2011

Самое близкое, что приходит на ум, это SortedSet.

http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html

Однако, это не позволяет вам делать sublist(int start, int end).Вы можете сделать subSet(E start, E end), но из вашего описания неясно, соответствует ли это вашим потребностям.Если вам нужна концепция фактической индексации, вы, вероятно, захотите List некоторой формы.Если нет дубликатов, важно Set - хорошая отправная точка.Любой Collection позволит вам сортировать на основе Comparator<E>, так что критерии менее важны - просто убедитесь, что сортировка перед доступом.

0 голосов
/ 27 января 2014

С indexed-tree-map вы можете сделать это:

SortedSet range = indexedTreeSet.subSet(
                          indexedTreeSet.exact(indexFrom),
                          indexedTreeSet.exact(indexTo));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...