335

Arrays クラスで昇順でソートする方法のように、配列を降順でソートする簡単な方法はありますか?

それとも、怠け者になるのをやめて、自分でこれを行う必要がありますか :[

4

25 に答える 25

397

これを使用して、あらゆる種類のオブジェクトを並べ替えることができます

sort(T[] a, Comparator<? super T> c) 

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

Arrays.sort()プリミティブ配列を降順でソートするために直接使用することはできません。Arrays.sort()で定義されたリバース Comparator を渡してメソッドを呼び出そうとするとCollections.reverseOrder()、エラーがスローされます。

sort(int[],comparator) に適したメソッドが見つかりません

これは、整数配列などの「オブジェクトの配列」では正常に機能しますが、int 配列などのプリミティブ配列では機能しません。

プリミティブ配列を降順で並べ替える唯一の方法は、まず配列を昇順で並べ替えてから、配列を元の位置に戻すことです。これは、2 次元プリミティブ配列にも当てはまります。

于 2009-11-07T23:12:15.233 に答える
88

あなたはこれを使うことができます:

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

Collections.reverseOrder()Comparator逆自然順序を使用してを返します。を使用して、独自のコンパレータの反転バージョンを取得できますCollections.reverseOrder(myComparator)

于 2009-11-08T02:14:01.313 に答える
78

代替案は(数字の場合!!!)

  1. 配列に-1を掛けます
  2. 選別
  3. もう一度 -1 を掛けます

文字通り話された:

array = -Arrays.sort(-array)
于 2014-09-05T16:58:28.983 に答える
13

まず、次を使用して配列をソートする必要があります。

Collections.sort(myArray);

次に、次を使用して昇順から降順に順序を逆にする必要があります。

Collections.reverse(myArray);
于 2016-02-26T19:35:49.933 に答える
5

プリミティブの要素を含む配列の場合、org.apache.commons.lang(3)(並べ替え後に) 配列を逆にする簡単な方法がある場合は、次を使用します。

ArrayUtils.reverse(array);
于 2014-02-27T10:27:43.943 に答える
4

あなたのユースケースが何であったかはわかりませんが、ここでの他の回答に加えて、別の(怠惰な)オプションは、あなたが示すように昇順で並べ替えますが、代わりに逆の順序で反復することです。

于 2014-02-27T10:51:42.263 に答える
1

ここでは多くの混乱が起こっています - 人々は非プリミティブ値の解決策を提案し、地面からいくつかのソートアルゴリズムを実装しようとし、追加のライブラリを含む解決策を提供し、いくつかのハックなものを披露します.元の質問に対する答えは50です. /50。コピー/貼り付けだけしたい人向け:

// our initial int[] array containing primitives
int[] arrOfPrimitives = new int[]{1,2,3,4,5,6};

// we have to convert it into array of Objects, using java's boxing
Integer[] arrOfObjects = new Integer[arrOfPrimitives.length];
for (int i = 0; i < arrOfPrimitives.length; i++) 
    arrOfObjects[i] = new Integer(arrOfPrimitives[i]);

// now when we have an array of Objects we can use that nice built-in method
Arrays.sort(arrOfObjects, Collections.reverseOrder());

arrOfObjects{6,5,4,3,2,1}今です。int 以外の配列がある場合は、代わりに対応するオブジェクトIntegerを使用します。

于 2019-10-08T12:01:26.373 に答える
0
public double[] sortArrayAlgorithm(double[] array) { //sort in descending order
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length; j++) {
            if (array[i] >= array[j]) {
                double x = array[i];
                array[i] = array[j];
                array[j] = x;
            }
        }
    }
    return array;
}

このメソッドを使用して double 型の配列を降順で並べ替えます。「戻り値の型」、「引数の型」を変更するだけで、他の型 (int、float など) の配列を並べ替えることができます。変数「x」型を対応する型に変換します。if 条件で ">=" を "<=" に変更して昇順にすることもできます。

于 2018-04-29T07:57:02.517 に答える