2013-11-27 5 views
1

Итак, я только что узнал о Arrays.sort(arrayName); и применил его в моем проекте, но я нашел его от самого низкого до самого высокого. Есть ли способ сделать это наоборот? (Я не думаю, что мне нужно опубликовать код, о котором идет речь, но если он понадобится, я отправлю его).Сортировка массива int от наивысшего до самого низкого

+1

Вы заметите, что существует еще один метод 'sort', который принимает' Comparator'. –

+3

@SotiriosDelimanolis: не сортировать 'int []'. –

+0

Прочтите это http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort (T [], java.util.Comparator) – Prateek

ответ

10

Если вы используете Integer[] вместо int[], то вы можете передать Comparator в качестве второго аргумента метода сортировки. Наложить обратный порядок, вы можете использовать Collections.reverseOrder() метода:

Arrays.sort(arr, Collections.reverseOrder()); 
+0

Отлично работает! Спасибо за помощь! – lukeb28

0
  1. использовать Integer[] вместо int[]
  2. Воспользоваться Collections.reverseOrder(): Возвращает компаратор, который налагает реверс естественного упорядочения на коллекции объектов, которые реализуют интерфейс Comparable
  3. Если возможно, используйте ArrayList<Integer> и Collections.sort(list, Collections.reverseOrder()) для более прочного случая.

    Integer[] intArr = new Integer[10]; 
    // add some integer 
    Arrays.sort(intArr, Collections.reverseOrder()) 
    
3

Если у вас есть int[] массив, вы можете сортировать его с помощью Arrays.sort, а затем повернуть его вспять:

int [] tab2 = new int[]{1,5,0,-2}; 
Arrays.sort(tab2); 
ArrayUtils.reverse(tab2); 
System.out.print(Arrays.toString(tab2)); 

Выход:

[5, 1, 0, -2] 

Code обратного метода (от org.apache.commons.lang.ArrayUtils.reverse(int[])):

public static void reverse(int[] array) { 
     if (array == null) { 
      return; 
     } 
     int i = 0; 
     int j = array.length - 1; 
     int tmp; 
     while (j > i) { 
      tmp = array[j]; 
      array[j] = array[i]; 
      array[i] = tmp; 
      j--; 
      i++; 
     } 
} 
1

Для некоторых случаев использования вы можете прийти, просто обработав отсортированный массив как «обратный сортированный». Например. для итерации от наивысшего до самого низкого числа вы можете использовать

int[] foo = ...; 
Arrays.sort(foo); 
for (int i=foo.length-1; i>=0; i--) { 
    doSomethingWith(foo[i]); 
} 
+0

Кажется, что больше кода, чем nessisary. – lukeb28

Смежные вопросы