Сортировка ArrayList TreeSets
У меня есть ArrayList TreeSets, определенный следующим образом (в Java), где n - это заданное число.
ArrayList<TreeSet<Integer>>(n)
Поскольку я знаю, что все значения внутри TreeSet отсортированы в порядке возрастания, мой список остается несортированным. Теперь я хочу отсортировать свой список на основе первого элемента каждого TreeSet, чтобы отсортировать как список, так и все наборы деревьев.
Можно ли отсортировать только те элементы, которые я получаю с помощью list.get(i)? Это тоже испортит мой TreeSets?
3 ответа
Допустим, у вас уже есть ArrayList<TreeSet<Integer>>
инициализируется; мы назовем это list
,
Вам придется пройти обычай Comparator<TreeSet<Integer>>
сортировать каждый TreeSet<Integer>
:
Collections.sort(list, Comparator.comparing(TreeSet::first));
Это сортирует ArrayList<TreeSet<Integer>>
в порядке возрастания в соответствии с первым элементом каждого TreeSet<Integer>
,
Вы можете попробовать отсортировать ArrayList
используя собственный компаратор. В этом случае ваш пользовательский компаратор может сравнивать первые числа из каждого из двух элементов набора деревьев.
Collections.sort(list, new ListOfTreeSetComparator());
class ListOfTreeSetComparator implements Comparator<TreeSet<Integer>> {
@Override
public int compare(TreeSet<Integer> ts1, TreeSet<Integer> ts2) {
return ts1.first().compareTo(ts2.first());
}
}
Обратите внимание, что есть потенциальная проблема с вашей логикой. Просто потому, что первые элементы в каждом TreeSet
иметь возрастающий порядок в вашем ArrayList
не обязательно означает, что все элементы будут отсортированы.
Вот некоторая грубая идея, которую вы можете реализовать
Collections.sort(ArrayList, new Comparator<TreeSet<Integer>>() {
@Override
public int compare(TreeSet lhs, TreeSet rhs) {
// -1 - less than, 1 - greater than, 0 - equal
return lhs.first().compareTo(rhs.first());
}
});