Подтвердить что ты не робот

Как получить список из набора и компаратора

Что такое "хорошее" (и почему?) решение, чтобы получить List от Set и отсортировано по сравнению с данным Comparator?

4b9b3361

Ответ 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, список будет содержать элементы в отсортированном порядке.