Сортировка 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());
            }
        });
Другие вопросы по тегам