Существует ли существующая реализация List
в Java, которая поддерживает порядок на основе предоставленного Comparator
?
Что-то, что можно использовать следующим образом:
Comparator cmp = new MyComparator();
List l = new OrderedList(cmp);
l.add(someT);
так что someT
вставляется таким образом, чтобы порядок в списке сохранялся в соответствии с cmp
(по предложению @andersoj Завершаю свой вопрос еще одной просьбой)
Также я хочу иметь возможность проходить список в отсортированном порядке, не удаляя элементы, т.е.:
T min = Const.SMALLEST_T;
for (T e: l) {
assertTrue(cmp.compare(min, e) >= 0);
min = e;
}
должен пройти.
Приветствуются все предложения (кроме указания использовать Collections.sort
в ненумерованном полном списке), хотя я бы предпочел что-то в java.*
или в конечном итоге org.apache.*
, так как в данный момент будет сложно вводить новые библиотеки.
Примечание: (UPDATE4)Я понял, что реализация такого списка будет иметь неадекватную производительность. Существует два общих подхода:
Нет 1. имеет проблемы с промахами кеша ЦП № 2. имеет проблемы со сдвигом элементов в массиве.
ОБНОВЛЕНИЕ2:
TreeSet
не работает, потому что он использует предоставленный компаратор ( MyComparator
) для проверки на равенство и на его основе предполагает, что элементы равны, и исключает их.Мне этот компаратор нужен только для упорядочивания, а не фильтрации "уникальности" (поскольку элементы по их естественному порядку не равны)
UPDATE3:
PriorityQueue
не работает как List
(как Мне нужно), потому что нет возможности пройти по нему в том порядке, в котором он «отсортирован», чтобы получить элементы в отсортированном порядке, вы должны удалить их из коллекции.
ОБНОВЛЕНИЕ:
Аналогичный вопрос:
Хороший отсортированный список для Java
Список отсортированных массивов в Java