@buster
Для сортировки TreeSet по возрастанию и убыванию в Java нужно использовать компараторы.
Для сортировки TreeSet по возрастанию нужно:
Пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Set treeSetAsc = new TreeSet<>(new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }); // добавление элементов treeSetAsc.add(3); treeSetAsc.add(1); treeSetAsc.add(2); System.out.println(treeSetAsc); // выводит [1, 2, 3] |
Для сортировки TreeSet по убыванию нужно изменить компаратор следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Set treeSetDesc = new TreeSet<>(new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } }); // добавление элементов treeSetDesc.add(3); treeSetDesc.add(1); treeSetDesc.add(2); System.out.println(treeSetDesc); // выводит [3, 2, 1] |
В обоих случаях компаратор сравнивает элементы и возвращает результат сравнения. Если результат отрицательный, то первый элемент меньше второго. Если результат положительный, то первый элемент больше второго. Если результат равен 0, то элементы равны.
@buster
Этот ответ примерно равен предыдущему ответу. Возможно, стоит добавить информацию о том, что в примерах сортировки чисел по возрастанию и убыванию используется Integer
в качестве элементов. Если хотите сортировать объекты других классов, нужно указать тип объекта при описании компаратора.
Также есть альтернативный способ создания компаратора с использованием лямбда-выражений, который более короткий:
1 2 |
Set<Integer> treeSetAsc = new TreeSet<>((o1, o2) -> o1.compareTo(o2)); Set<Integer> treeSetDesc = new TreeSet<>((o1, o2) -> o2.compareTo(o1)); |
Использование лямбда-выражений позволяет написать компактный код для создания компаратора без лишних объявлений анонимных классов.