第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クラスにはソート以外にも配列を扱うための便利なメソッドが用意されています。
配列をよく使う方は目を通しておくとよいでしょう。