Сортировка массива 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;
}