第42回 配列のソート
今回のテーマは「配列のソート」です。
配列をソートするには、Arraysクラスのsortメソッドを使用します。 基本型の配列に限らず、オブジェクトの配列もソート可能です。
いくつかソート処理を実行してみましょう。
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
int[] intArray = { 1, 9, 3, 6, 7, 4, 5, 8, 2, 10, };
System.out.println("int型配列ソート前:
" + Arrays.toString(intArray));
Arrays.sort(intArray);
System.out.println("int型配列を昇順でソート後:
" + Arrays.toString(intArray));
String[] stringArray = { "a", "c", "f", "b", "e", "d", };
System.out.println("String型配列ソート前:
" + Arrays.toString(stringArray));
Arrays.sort(stringArray, Collections.reverseOrder());
System.out.println("String型配列を降順でソート後:
" + Arrays.toString(stringArray));
Player[] playerArray = new Player[5];
playerArray[0] = new Player("たろう", new BigDecimal("160.5"));
playerArray[1] = new Player("じろう", new BigDecimal("184.3"));
playerArray[2] = new Player("さぶろう", new BigDecimal("172.1"));
playerArray[3] = new Player("しろう", new BigDecimal("163.7"));
playerArray[4] = new Player("ごろう", new BigDecimal("184.3"));
System.out.println("Player型配列ソート前:
" + Arrays.toString(playerArray));
Arrays.sort(playerArray, new Comparator<Player>() {
@Override
public int compare(Player o1, Player o2) {
if (!o1.getHeight().equals(o2.getHeight())) {
return o1.getHeight().compareTo(o2.getHeight());
}
if (!o1.getName().equals(o2.getName())) {
return o1.getName().compareTo(o2.getName());
}
return 0;
}
});
System.out.println("Player型配列を身長の昇順、名前の昇順でソート後:
" + Arrays.toString(playerArray));
Arrays.sort(playerArray, new Comparator<Player>() {
@Override
public int compare(Player o1, Player o2) {
if (!o1.getName().equals(o2.getName())) {
return o2.getName().compareTo(o1.getName());
}
return 0;
}
});
System.out.println("Player型配列を名前の降順でソート後:
" + Arrays.toString(playerArray));
}
static class Player {
private String name = null;
private BigDecimal height = null;
public Player(String name, BigDecimal height) {
this.name = name;
this.height = height;
}
public String getName() {
return name;
}
public BigDecimal getHeight() {
return height;
}
@Override
public String toString() {
return "名前:" + name + " 身長:" + height;
}
}
}
Comparatorを使用することで自由に順序を決めることができますね。
Arraysクラスにはソート以外にも配列を扱うための便利なメソッドが用意されています。
配列をよく使う方は目を通しておくとよいでしょう。

