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番目の要素を基準にソートする」方法を見てみましょう。 このように、 最後に、学んだことを活かして、配列を並び替えるコードを書いてみましょう。 次の整数配列を 次の配列を 次の文字列配列を昇順(アルファベット順)にソートしてください。 このコードを実行して、正しくソートできるか確認してみましょう。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]