web-dev-qa-db-ja.com

int配列を降順に並べ替える

可能性のある複製:
プリミティブ型の配列を降順に並べ替える
Java:floatの配列を逆順にソートする方法?
Javaでint配列を反転するにはどうすればよいですか

次のコードは、配列をascendingの順序で並べ替えます。

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

descendingの順に並べる必要があります。コンパレータを使用してこれを行うにはどうすればよいですか?

助けてください。

29
android

プリミティブ配列タイプの場合、逆ソートアルゴリズムを記述する必要があります。

または、_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);
_
17
Buhake Sindi
    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);
6
John B

Guava にはメソッドがあります Ints.asList()List<Integer>int[]配列。 Collections.sortでこれを使用して、基礎となる配列にコンパレータを適用できます。

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

後者は実際の配列に裏打ちされたライブリストであるため、非常に効率的であることに注意してください。

5

大きな/長い配列ではない場合は、単にそれをミラーリングします:

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; 
}
5
Matjaz Muhic