配列の並べ替え・ソートは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]);
       }

}
 
 
java 繰り返しを使って配列の値を順番に表示

繰り返しを使って配列の値を順番に表示する。これは簡単!


 
では、質問です。この配列に入れた複数の数字を、小さい順に並べ替えて表示するにはどうすればよいでしょう? 「配列の最初から順番に値を取り出して、どちらが大きいか比較して入れ替えて‥‥」といった並べ替えの方法をすぐに思い浮かべた人。それももちろん正解です。が、実はもっと単純な方法があるのですよ。
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メソッドを使えば、配列の数字が昇順に並べられる

Arrays.sortメソッドを使えば、たった1行追加するだけで配列の数字がきれいに並べ替えられる!

こんな具合に、配列の値はきれいに小さいものから順番に並べ替えられて表示されます。ポイントは、「Arrays.sort(arr);」という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を使ったクラスとして用意しておけば、必要に応じて再利用できて便利ですね。特にオブジェクトの並べ替えには必須のものといってよいでしょう。

【関連記事】

※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。