Что такое "хорошее" (и почему?) решение, чтобы получить List от Set и отсортировано по сравнению с данным Comparator?
Как получить список из набора и компаратора
Ответ 1
Set<Object> set = new HashSet<Object>();
// add stuff
List<Object> list = new ArrayList<Object>(set);
Collections.sort(list, new MyComparator());
Ответ 2
Просто постройте его. ArrayList имеет конструктор который принимает другой Collection.
Set<Foo> set = new TreeSet<Foo>(new FooComparator<Foo>());
// Fill it.
List<Foo> list = new ArrayList<Foo>(set);
// Here your list with items in the same order as the original set.
Ответ 3
Или:
Set<X> sortedSet = new TreeSet<X>(comparator); ...
List<X> list = new ArrayList<X>(sortedSet);
или
Set<X> unsortedSet = new HashSet<X>(); ...
List<X> list = new ArrayList<X>(unsortedSet);
Collections.sort(list, comparator);
Ответ 4
Предполагая, что вы начинаете с несортированного набора или набора, отсортированного в другом порядке, возможно, наиболее эффективным считается, что вам нужен модифицируемый список.
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.
Ответ 5
Вот как вы получаете List, когда у вас есть Set:
List list = new ArrayList(set);
Не уверен, что вы ожидаете делать с Comparator. Если сортировка Set, список будет содержать элементы в отсортированном порядке.