お疲れ様です。はるさらと申します。
Javaで開発を進めていると「2次元配列を並び替えたい」というケースは
意外と多く出てきます。
たとえば、社員データを「年齢順」にソートしたり、
売上データを「金額の大きい順」に並べ替えたいといった場面です。
この記事では、経験の浅い方でも理解しやすいように
サンプルコード付きで、2次元配列のソート方法を解説していきます。
また、実務でよく使うケースや代替手法も紹介しますので、ぜひ参考にしてください。
Javaで2次元配列をソートする必要性
2次元配列は「表形式のデータ」を扱うときに便利です。
例えば以下のように [id, 名前, 年齢] の形式でデータを持っているとしましょう。
String[][] users = {
{"1", "Tanaka", "25"},
{"2", "Sato", "30"},
{"3", "Yamada", "22"}
};
ここで「年齢の昇順に並べ替えたい」と思ったら、
2次元配列の特定の列を基準にソートする必要があります。
しかし、1次元配列やListと比べると少し難易度が高く、
経験の浅い方がつまずきやすいポイントでもあります。
基本のサンプル:2次元配列を年齢で昇順ソート
まずは基本的なサンプルです。
JavaのArrays.sortメソッドに値を渡して並び替えます。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[][] users = {
{"1", "Tanaka", "25"},
{"2", "Sato", "30"},
{"3", "Yamada", "22"}
};
// 年齢(インデックス2)で昇順ソート
Arrays.sort(users, (a, b) -> Integer.compare(
Integer.parseInt(a[2]),
Integer.parseInt(b[2])
));
// 結果を出力
for (String[] user : users) {
System.out.println(Arrays.toString(user));
}
}
}
実行結果
[3, Yamada, 22]
[1, Tanaka, 25]
[2, Sato, 30]
このように、インデックスを指定して比較処理を書けば、
任意の列を基準にソートできます。
実務でよく使う応用例:売上データを金額の降順で並び替える
現場では、2次元配列を「数字の大きい順」「日付の新しい順」に
ソートするケースが多いです。
以下は売上データ [商品名, 金額] を降順にソートする例です。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[][] sales = {
{"PC", "150000"},
{"Phone", "80000"},
{"Tablet", "120000"}
};
// 金額(インデックス1)で降順ソート
Arrays.sort(sales, (a, b) -> Integer.compare(
Integer.parseInt(b[1]),
Integer.parseInt(a[1])
));
for (String[] s : sales) {
System.out.println(Arrays.toString(s));
}
}
}
実行結果
[PC, 150000]
[Tablet, 120000]
[Phone, 80000]
このように「a と b の順番を逆にする」だけで降順にできます。
代替手法の比較:Listに変換してソートする
2次元配列のままだと可読性が下がりやすいため、
Listに変換してからソートする方法もよく使われます。
こちらの方が柔軟性が高く、JavaのStreamAPIとも組み合わせやすいです。
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String[]> users = new ArrayList<>();
users.add(new String[]{"1", "Tanaka", "25"});
users.add(new String[]{"2", "Sato", "30"});
users.add(new String[]{"3", "Yamada", "22"});
// 年齢(インデックス2)で昇順ソート
users.sort(Comparator.comparingInt(a -> Integer.parseInt(a[2])));
for (String[] user : users) {
System.out.println(Arrays.toString(user));
}
}
}
この方法は、List操作に慣れている方にとって扱いやすいのがメリットです。
注意点:間違えやすいポイント
2次元配列のソートを行うときに、
間違えやすい点を整理しておきます。
- 文字列を数値に変換せずに比較してしまう
→"30"と"100"を文字列で比較すると、
辞書順になり意図しない結果になります。必ずInteger.parseIntで数値変換しましょう。 - 配列のインデックスを間違える
→[id, 名前, 年齢]の形式なのに、
年齢をソートするつもりでインデックス1を指定してしまうと「名前順」になります。 - 降順ソートの実装を忘れる
→Integer.compare(a, b)では昇順、
降順にしたい場合はInteger.compare(b, a)と逆にする必要があります。
まとめ
- Javaで2次元配列をソートするには、
Arrays.sortにコンパレータを渡す方法が基本。 - 実務では「数値の降順」や「日付順」で並べ替えるケースが多い。
- Listに変換してソートする方法もあり、柔軟性が高い。
- 文字列を数値に変換し忘れたり、インデックスを間違えると意図しない結果になるので注意が必要。
2次元配列はシンプルなデータ構造ですが、
並べ替えを正しく実装できると業務効率も大きく向上します。
今回紹介したサンプルコードを活用して、ぜひ現場の開発に役立ててみてください。
どなたかのお役に立てば幸いです。
それではまたー!




































