読者です 読者をやめる 読者になる 読者になる

like life lives

技術以外のことに興味が寄りすぎな技術ブログ

Android(Java)でプリミティブ型の配列の降順ソートがめんどくさい

Androidでint型の配列を使ってて、ふらっと降順ソートをしたくなったのですが、案外と面倒くさい手順を踏まなければいけなかったのでメモ。

int型配列の昇順ソート

降順ソートを説明する前に。

昇順でソートしたい場合は下の一行で済みます。

Arrays.sort(array);

Arraysはjava.util.Arraysパッケージのクラスです。

int型配列の降順ソート

降順ソートをするためには以下の関数を使用します。

java.util.Arrays.sort(T[] a, Comparator<? super T> c) 
引数
  • T[] a

ソートしたい配列

  • Comparator c

ソートのルールを定義するComparatorインターフェースを持つオブジェクト


以下のように使います。

Integer[] ary =  {18, 32, 49, 3, 45, 2, 36, 53, 44, 29};

Arrays.sort(ary, new Comparator<Integer>() {
  @Override
  publicint compare(Integer lhs, Integer rhs) {
    if (lhs < rhs) {
      return 1;
    }
    elseif (lhs > rhs) {
      return -1;
    }

    return 0;
  }
});

実行するとaryの内容が降順に整列されています。

ここで「ん?」と思った方もいるでしょうが、aryはIntegerオブジェクト型で、プリミティブ型のintではありません。

これはsort関数の第二引数、Comparatorインターフェースの型パラメータにオブジェクト型しか指定できないためです。

「俺はint型をソートしたいんだよ!」って方はソートした後に配列を型変換しなおしてください。

わけあって整数の巨大な配列を持たねばならずメモリを節約したいなら、NDKのSTLでsort関数でも使いましょう