Java の配列をソートする「Arrays.sort()」の使い方
新人
「Java で配列を並び替えるにはどうすればいいですか?」
先輩
「Java では Arrays.sort() を使うと簡単に配列をソートできるよ!」
新人
「それは便利ですね!でも、どうやって使えばいいんですか?」
先輩
「では、基本的な使い方から見ていこう!」
1. Java の配列とは?(基本的な説明)
Java の配列とは、同じ種類のデータをまとめて管理できる仕組みです。例えば、テストの点数を保存するときに、配列を使うと便利です。
配列の基本的な宣言方法
public class ArrayExample {
public static void main(String[] args) {
// 5つの整数を格納する配列を作成
int[] numbers = {40, 10, 30, 20, 50};
// 配列の中身を表示
System.out.println("配列の中身:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
配列の中身:
40 10 30 20 50
2. 配列のソートとは?(基本概念)
配列のソートとは、配列の要素を昇順や降順に並び替えることを指します。Java では、Arrays.sort() メソッドを使うことで、簡単にソートができます。
配列の並び替えが必要な理由
- ✔ データを見やすく整理する
- ✔ 検索を高速にする
- ✔ アルゴリズムの処理を効率化する
配列の並び替えの種類
- ✔ 昇順(小さい順に並び替える)
- ✔ 降順(大きい順に並び替える)
次の章では、Arrays.sort() を使って配列を並び替える方法を解説します。
3. Arrays.sort() を使った基本的なソート方法
Java で配列を並び替えるには、Arrays.sort() メソッドを使います。このメソッドを使うと、配列を昇順(小さい順)にソートすることができます。
基本的な使い方
まず、Arrays.sort() を使って整数の配列を並び替えてみましょう。
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
// ソート前の配列
int[] numbers = {50, 20, 40, 10, 30};
// 配列をソート
Arrays.sort(numbers);
// ソート後の結果を表示
System.out.println("ソート後の配列:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
ソート後の配列:
10 20 30 40 50
このように、Arrays.sort() を実行すると、自動的に配列が昇順に並び替えられます。
4. 昇順・降順でソートする方法
デフォルトの Arrays.sort() では昇順にソートされますが、降順(大きい順)に並び替えたい場合は、Integer クラスと Comparator を使います。
降順にソートする方法
以下のコードでは、Integer クラスを使って降順にソートします。
import java.util.Arrays;
import java.util.Collections;
public class SortDescending {
public static void main(String[] args) {
// ソート前の配列(ラッパークラス Integer を使用)
Integer[] numbers = {50, 20, 40, 10, 30};
// 降順にソート
Arrays.sort(numbers, Collections.reverseOrder());
// ソート後の結果を表示
System.out.println("降順ソート後の配列:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
降順ソート後の配列:
50 40 30 20 10
注意点として、降順ソートを行う場合は int[] ではなく Integer[](ラッパークラス)を使用する必要があります。
5. 文字列の配列をソートする方法
数値だけでなく、文字列の配列も Arrays.sort() を使ってソートできます。文字列の場合、アルファベット順(辞書順)に並び替えられます。
文字列をソートする例
以下のコードでは、名前のリストをソートしています。
import java.util.Arrays;
public class StringSortExample {
public static void main(String[] args) {
// ソート前の文字列配列
String[] names = {"Sato", "Tanaka", "Kobayashi", "Yamada", "Abe"};
// 文字列を昇順にソート
Arrays.sort(names);
// ソート後の結果を表示
System.out.println("文字列の昇順ソート:");
for (String name : names) {
System.out.print(name + " ");
}
}
}
文字列の昇順ソート:
Abe Kobayashi Sato Tanaka Yamada
このように、文字列も Arrays.sort() を使うことで簡単にソートできます。
文字列を降順にソートする方法
文字列を降順にソートする場合は、Collections.reverseOrder() を使います。
import java.util.Arrays;
import java.util.Collections;
public class StringSortDescending {
public static void main(String[] args) {
// ソート前の文字列配列
String[] names = {"Sato", "Tanaka", "Kobayashi", "Yamada", "Abe"};
// 文字列を降順にソート
Arrays.sort(names, Collections.reverseOrder());
// ソート後の結果を表示
System.out.println("文字列の降順ソート:");
for (String name : names) {
System.out.print(name + " ");
}
}
}
文字列の降順ソート:
Yamada Tanaka Sato Kobayashi Abe
このように、 Java の たとえば、数値の配列を「偶数を優先して昇順に並び替える」ようなルールでソートすることができます。 このように、 2次元配列(多次元配列)をソートする場合も、 例えば、「各行の2番目の要素を基準にソートする」方法を見てみましょう。 このように、 最後に、学んだことを活かして、配列を並び替えるコードを書いてみましょう。 次の整数配列を 次の配列を 次の文字列配列を昇順(アルファベット順)にソートしてください。 このコードを実行して、正しくソートできるか確認してみましょう。
ここまでJavaの配列をソートするための標準的な手法であるArrays.sort()について詳しく解説してきました。Javaプログラミングにおいてデータの並び替えは、情報の視認性を高めるだけでなく、検索アルゴリズムの効率化やデータの統計処理を行う上で避けては通れない非常に重要な技術です。
本記事で学んだ内容を振り返ると、最も基本となるのは昇順ソートです。プリミティブ型の配列(intやdoubleなど)であれば、引数に配列を渡すだけで最小値から最大値へと瞬時に整列させることができます。一方で、実務で多用される降順ソート(大きい順)を実装する場合には、int型ではなくラッパークラスであるInteger型を使用し、Collections.reverseOrder()というコンパレータを併用する必要があるという点も、Java初心者の方が特につまずきやすいポイントとして挙げられます。
さらに一歩進んだ活用として、文字列(String)の辞書順ソートや、Comparatorインターフェースを利用したカスタムソートについても触れました。例えば、文字列配列をアルファベット順に並べる処理は、ユーザー一覧の表示や辞書機能の実装に欠かせません。また、2次元配列のソートにおいては、特定の列をキーにして行全体を並び替えるといった、データベースのテーブル操作に近い処理もJavaの標準機能だけで完結させることができます。
これらを理解し、適切に使い分けることができれば、複雑なデータ構造であっても自由自在に整理整頓できるようになります。まずは基本の昇順ソートから、徐々にカスタムソートやラムダ式を用いた高度な記述に挑戦してみてください。
最後に、今回学習した昇順・降順・文字列ソートをすべて網羅した復習用コードを確認しましょう。
生徒 「先生、ありがとうございました!Arrays.sortを使うだけで、あんなにバラバラだった数字が綺麗に並ぶのは感動的ですね。」 先生 「そうですね。Javaには強力な標準ライブラリが用意されているので、自分で複雑な並び替えのロジックを書かなくても、メソッド一つで実行できるのが大きな強みですよ。」 生徒 「でも、降順にする時にint型が使えなくてInteger型を使わないといけないのは、最初は少し戸惑いそうです。そこだけ注意が必要ですね。」 先生 「鋭い指摘です!JavaのGenericsという仕組みの関係で、Comparatorを使うときはオブジェクト型である必要があるんです。ラッパークラスの概念は少し難しいですが、ソートを繰り返していくうちに自然と身につきますよ。」 生徒 「なるほど。文字列のソートも辞書順になるので、名簿の整理とかにも使えそうです。次は多次元配列を使って、もっと複雑な名簿の並び替えに挑戦してみたいです!」 先生 「その意気です!まずは今回覚えた基礎をしっかり復習して、実際に色々なデータを入れて動かしてみてください。手を動かすことが一番の近道ですからね。」Arrays.sort() と <
6. カスタムソート(Comparator を使う方法)
Arrays.sort() を使うと、基本的な昇順・降順のソートができますが、独自のルールでソートしたい場合は Comparator を使います。Comparator を使ったカスタムソート
import java.util.Arrays;
import java.util.Comparator;
public class CustomSortExample {
public static void main(String[] args) {
Integer[] numbers = {5, 8, 3, 10, 1, 6};
// カスタムソート: 偶数を優先し、同じ種類の数値は昇順
Arrays.sort(numbers, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
if (a % 2 == 0 && b % 2 != 0) {
return -1; // 偶数を優先
} else if (a % 2 != 0 && b % 2 == 0) {
return 1; // 奇数を後に
}
return a - b; // 昇順
}
});
// 結果の表示
System.out.println("カスタムソート後の配列:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
カスタムソート後の配列:
6 8 10 1 3 5
Comparator を使うことで、独自のルールでソートを行うことができます。7. 多次元配列のソート方法
Arrays.sort() を使うことができます。
import java.util.Arrays;
import java.util.Comparator;
public class MultiDimArraySort {
public static void main(String[] args) {
int[][] data = {
{1, 5},
{3, 2},
{2, 8},
{4, 1}
};
// 2列目(インデックス 1)の値を基準にソート
Arrays.sort(data, Comparator.comparingInt(arr -> arr[1]));
// 結果の表示
System.out.println("多次元配列のソート後:");
for (int[] row : data) {
System.out.println(Arrays.toString(row));
}
}
}
多次元配列のソート後:
[4, 1]
[3, 2]
[1, 5]
[2, 8]
Comparator を活用すると、多次元配列も簡単にソートできます。8. 練習問題:「配列を並び替えるコードを書こう」
問題 1: 昇順ソート
Arrays.sort() を使って昇順に並び替えるコードを書いてください。
int[] numbers = {15, 3, 8, 21, 5};
問題 2: 降順ソート
Collections.reverseOrder() を使って降順に並び替えてください。
Integer[] numbers = {12, 45, 23, 9, 33};
問題 3: 文字列のソート
String[] words = {"banana", "apple", "cherry", "date"};
解答
import java.util.Arrays;
import java.util.Collections;
public class SortingPractice {
public static void main(String[] args) {
// 問題 1: 昇順ソート
int[] numbers1 = {15, 3, 8, 21, 5};
Arrays.sort(numbers1);
System.out.println("昇順ソート: " + Arrays.toString(numbers1));
// 問題 2: 降順ソート
Integer[] numbers2 = {12, 45, 23, 9, 33};
Arrays.sort(numbers2, Collections.reverseOrder());
System.out.println("降順ソート: " + Arrays.toString(numbers2));
// 問題 3: 文字列のソート
String[] words = {"banana", "apple", "cherry", "date"};
Arrays.sort(words);
System.out.println("文字列の昇順ソート: " + Arrays.toString(words));
}
}
昇順ソート: [3, 5, 8, 15, 21]
降順ソート: [45, 33, 23, 12, 9]
文字列の昇順ソート: [apple, banana, cherry, date]
まとめ
ソート機能の重要ポイント
応用的な活用シーン
総仕上げ:全てのソートを組み合わせたサンプルプログラム
import java.util.Arrays;
import java.util.Collections;
public class SortingFinalSummary {
public static void main(String[] args) {
// 1. 数値配列の昇順ソート(基本)
int[] primitiveNumbers = {8, 2, 5, 1, 9};
Arrays.sort(primitiveNumbers);
System.out.println("基本の昇順: " + Arrays.toString(primitiveNumbers));
// 2. ラッパークラスを使用した降順ソート
Integer[] wrapperNumbers = {8, 2, 5, 1, 9};
Arrays.sort(wrapperNumbers, Collections.reverseOrder());
System.out.println("応用的な降順: " + Arrays.toString(wrapperNumbers));
// 3. 文字列配列の辞書順ソート
String[] fruits = {"Orange", "Apple", "Grapes", "Banana"};
Arrays.sort(fruits);
System.out.println("果物の辞書順: " + Arrays.toString(fruits));
// 4. 文字列配列の逆順ソート
Arrays.sort(fruits, Collections.reverseOrder());
System.out.println("果物の逆順表示: " + Arrays.toString(fruits));
}
}
基本の昇順: [1, 2, 5, 8, 9]
応用的な降順: [9, 8, 5, 2, 1]
果物の辞書順: [Apple, Banana, Grapes, Orange]
果物の逆順表示: [Orange, Grapes, Banana, Apple]