配列の並べ替え・ソートはArray.sortで!
たくさんの値を配列に入れて処理する、というのはプログラミングの基本ともいえるものですね。単純に値をすべて表示させたりするならば誰でもできるでしょう。例えば、こんな具合です。public class Sample { public static void main(String[] args) { int[] arr = new int[]{3,1,5,4,6,2}; for(int i = 0;i < arr.length;i++) System.out.println(arr[i]); } }
繰り返しを使って配列の値を順番に表示する。これは簡単! |
import java.util.*; public class Sample { public static void main(String[] args) { int[] arr = new int[]{3,1,5,4,6,2}; Arrays.sort(arr); for(int i = 0;i < arr.length;i++) System.out.println(arr[i]); } }
Arrays.sortメソッドを使えば、たった1行追加するだけで配列の数字がきれいに並べ替えられる!
このArrays.sortの引数に配列を入れてやるとアラ不思議! これだけで配列の中身がきれいに並べ替わってしまうのです。並べ替えの基本として覚えておきたい機能ですね!
ちなみに、このArraysはjava.utilパッケージにありますので、これをimportするのを忘れないように。
独自ルールの並び替えはComparatorで!
単純に数字を小さい順から並べ替えるならこれでいいのですが、時にはもっと違った形での並べ替えを行いたい場合もあるでしょう。そうした「小さい順ではない、独自の並べ替え」を行う場合はどうすればよいでしょう?
この場合にも、実は割りと簡単な方法があります。それはjava.utilパッケージにある「Comparator」というクラスを使った方法です。
このクラスをimplementsしたクラスを用意し、その中に「compare」というメソッドを用意します。これは、以下のような形をしています。
public int compare(Object o1,Object o2){ ・・・2つのうち、どちらが先か決める・・・ return 整数; }
ちょっとこれだけではわからないですね。このメソッドは、引数に2つのObjectが渡されます。この2つを並べ替えたとき、1つ目が先になるなら正の整数を、反対に1つ目が後になるなら負の整数を返すような処理を用意すればいいのです。
こうして作ったクラスを、Arrays.sortの際に、並べ替える配列と一緒に渡せば、このクラスで定義したルールをもとに並べ替えを行うようになります。
簡単な例として、いくつかのテキストが入っている配列を「テキストの文字数が少ない順番」に並べ替えて表示させてみましょう。
import java.util.*; public class Sample { public static void main(String[] args) { String[] arr = new String[]{"おはよう","こんにちは", "おこんばんは","はろ~"}; Arrays.sort(arr,new MyComparator()); for(int i = 0;i < arr.length;i++) System.out.println(i + "番目:" + arr[i]); } } class MyComparator implements Comparator { public int compare(Object o1,Object o2){ int n1 = o1.toString().length(); int n2 = o2.toString().length(); return n1 < n2 ? -1 : 1; } }
実行すると、文字数の少ないものから順に表示される。
実際に試してみてください。いくつかのテキストが、文字数の少ない順にきれいに並べ替えられますよ。
よく使う並べ替えの方法は、このComparatorを使ったクラスとして用意しておけば、必要に応じて再利用できて便利ですね。特にオブジェクトの並べ替えには必須のものといってよいでしょう。
【関連記事】