Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Сортировка массива примитивов по убыванию

#java


Как отсортировать массив например int в порядке обратном Arrays.sort.
Как сделать это просто и красиво?
Ничего лучше, чем подсунуть в sort() компаратор не приходит на ум. Но компаратор
принимает только массив Integer.    


Ответы

Ответ 1



Нет прямого способа сортировки массива примитивов в убывающем порядке. Поэтому у вас в общем есть два пути (без учета возможности реализации собственного алгоритма сортировки): Переход на классы-обертки и использование Collections.sort и Comparator Сортировка примитивов по возрастанию и дополнительные манипуляции с результатом: либо реверс, либо смена логики, использующей результат сортировки (в конце концов результат одной сортировки от другой отличается лишь в направлении прохода по массиву).

Ответ 2



Как сделать это просто и красиво? Arrays.sort(sortedData, Collections.reverseOrder()); компаратор принимает только массив Integer Это не так. Массив стрингов тоже сортирует: String[] strings = {"d", "e", "b", "a", "c"}; Arrays.sort(strings,Collections.reverseOrder()); for (int i = 0; i < strings.length; i++) { System.out.print(strings[i] + " "); } Вывод: e d c b a

Ответ 3



Arrays.sort(sortedData, Collections.reverseOrder());

Ответ 4



в Java8 отсортировать в обратном порядке можно так Arrays.parallelSort(array)

Ответ 5



Достаточно в компораторе результат сравнения умножить на -1: return a.compareTo(b) * (-1);

Ответ 6



Можно обойтись без реализации компоратора,тогда можно будет написать так: //... ArrayList list = new ArrayList(); list.add(1); list.add(3); list.add(2); Collections.sort(list); Collections.reverse(list); System.out.println(list); //... Затем можно использовать: int[] intArray = ArrayUtils.toPrimitive(list.toArray(new Integer[myList.size()])); Правда это все "изврат", проще написать свою сортировку, которая к тому же будет работать быстрее.

Комментариев нет:

Отправить комментарий