Сортировка массива int в порядке убывания

Возможный дубликат:
Сортировка массивов примитивных типов в порядке убывания
Java: как отсортировать массив поплавков в обратном порядке?
Как изменить массив int в Java?

Следующий код сортирует массив в порядке возрастания:

int a[] = {30,7,9,20};
Arrays.sort(a);
System.out.println(Arrays.toString(a));

Мне нужно отсортировать его в порядке убывания. Как использовать Comparator для этого?

Пожалуйста, помогите.

Ответ 1

Для примитивных типов массивов вам придется написать алгоритм обратной сортировки:

В качестве альтернативы вы можете преобразовать int[] в Integer[] и написать компаратор:

public class IntegerComparator implements Comparator<Integer> {

    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
}

или используйте Collections.reverseOrder(), поскольку он работает только с не примитивными типами массивов.

и, наконец,

Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1);
Arrays.sort(a2, new IntegerComparator()); // OR
// Arrays.sort(a2, Collections.reverseOrder());

//Unbox the array to primitive type
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2);

Ответ 2

Guava имеет метод Ints.asList() для создания List<Integer>, поддерживаемого массивом int[]. Вы можете использовать это с Collections.sort для применения компаратора к базовому массиву.

List<Integer> integersList = Ints.asList(arr);
Collections.sort(integersList, Collections.reverseOrder());

Обратите внимание, что последний представляет собой живой список, поддерживаемый фактическим массивом, поэтому он должен быть довольно эффективным.

Ответ 3

    Comparator<Integer> comparator = new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2.compareTo(o1);
        }
    };

    // option 1
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
    Arrays.sort(array, comparator);

    // option 2
    int[] array2 = new int[] { 1, 24, 4, 4, 345 };
    List<Integer>list = Ints.asList(array2);
    Collections.sort(list, comparator);
    array2 = Ints.toArray(list);

Ответ 4

Если это не большой/длинный массив, просто отразите его:

for( int i = 0; i < arr.length/2; ++i ) 
{ 
  temp = arr[i]; 
  arr[i] = arr[arr.length - i - 1]; 
  arr[arr.length - i - 1] = temp; 
}