Реализация списка, которая поддерживает порядок

Существует ли существующая реализация 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. Использовать связанную структуру (своего рода) B-дерево или аналогичную
  2. Использовать массив и вставку (с бинарным поиском)

Нет 1. имеет проблемы с промахами кеша ЦП № 2. имеет проблемы со сдвигом элементов в массиве.

ОБНОВЛЕНИЕ2: TreeSetне работает, потому что он использует предоставленный компаратор ( MyComparator) для проверки на равенство и на его основе предполагает, что элементы равны, и исключает их.Мне этот компаратор нужен только для упорядочивания, а не фильтрации "уникальности" (поскольку элементы по их естественному порядку не равны)

UPDATE3: PriorityQueueне работает как List(как Мне нужно), потому что нет возможности пройти по нему в том порядке, в котором он «отсортирован», чтобы получить элементы в отсортированном порядке, вы должны удалить их из коллекции.

ОБНОВЛЕНИЕ:

Аналогичный вопрос:
Хороший отсортированный список для Java
Список отсортированных массивов в Java

16
задан Community 23 May 2017 в 11:54
поделиться