Предполагая, что вы начинаете с несортированного набора или набора, отсортированного в другом порядке, следующее, вероятно, наиболее эффективно, если вам требуется изменяемый список.
Set<T> unsortedSet = ...
List<T> list = new ArrayList<T>(unsortedSet);
Collections.sort(list, comparator);
Если допустим немодифицируемый список, то следующее немного быстрее:
Set<T> unsortedSet = ...
T[] array = new T[unsortedSet.size()];
unsortedSet.toArray(array);
Arrays.sort(array, comparator);
List<T> list = Arrays.asList(array);
В первой версии Collections.sort(...)
копирует содержимое списка в массив, сортирует массив и копирует отсортированные элементы обратно в список. Вторая версия работает быстрее, поскольку ей не нужно копировать отсортированные элементы.
Но, если честно, разница в производительности, вероятно, незначительна. Действительно, по мере увеличения размеров входного набора производительность будет зависеть от времени O(NlogN)
на выполнение сортировки. Шаги копирования O(N)
и будут уменьшаться по мере увеличения N.