株式会社イーヴ

EeBlog(テクニカルブログ)

TOP > EeBlog > 第42回 配列のソート

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