山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

[Java] 多次元の配列のソート

yamakasa.net

多次元の配列のソート

競技プログラミングの問題を解いてるときに、多次元の配列のソートってどうやるんだろうと悩んだことがありました。ここで多次元の配列のソートとは、例えば次の二つの配列A, Bが与えられたとします。

A = {4, 2, 5, 6, 1} B = {20, 30, 10, 50, 60}

ここで、各配列のi番目の要素を一組のデータとします。例えば、1番目の要素である4と20が一つのデータであるとします。

ここで、配列Aを昇順にソートしたとき、配列BもAの要素に対応して並び替えることを多次元のソートと呼ぶことにします。

この多次元のソートを実装する上で次のサイトが役に立ちました。

normalse.hatenablog.jp

各配列のi番目の要素を一つのインスタンスとして定義します。構造体みたいなもんでしょうか。

そして、Arrays.sortとComparatorを使います。

コード

import java.util.Arrays;
import java.util.Comparator;

public class Exec {
    public static void main(String[] args) {
        int []A = {4, 2, 5, 6, 1};
        int []B = {20, 30, 10, 50, 60};
        Data []d = new Data[5];
        for(int i= 0; i < 5; i++) {
            d[i] = new Data(A[i], B[i]);
        }
        Arrays.sort(d, new Comparator<Data>() {
            public int compare(Data d1, Data d2) {
                return d1.getA() - d2.getA();
            }
        });
        for(int i = 0; i < 5; i++) {
            System.out.println(d[i].getA() + " : " + d[i].getB());
        }
    }
}

class Data{
    private int a;
    private int b;
    public Data(int a, int b) {
        this.a = a;
        this.b = b;
    }
    public int getA() {
        return a;
    }
    public int getB() {
        return b;
    }
}