配列
配列は同じ型のデータを格納するコンテナです。このレッスンでは、Javaでの配列の使用方法を学びます。
配列とは
配列は同じ型の要素の固定サイズのコレクションです。
配列の特徴
| 特徴 | 説明 |
|---|---|
| 固定サイズ | 作成後にサイズを変更できない |
| 同じ型 | すべての要素が同じ型でなければならない |
| 連続ストレージ | 要素はメモリ内に連続して格納 |
| インデックスアクセス | インデックスで要素にアクセス(0から開始) |
宣言と初期化
方法1:先に宣言してから初期化
JAVA
// 配列を宣言
int[] arr;
// 初期化(スペースを割り当て)
arr = new int[5]; // 5つの要素、デフォルト値は0
方法2:宣言と初期化を同時に行う
JAVA
// サイズを指定
int[] arr = new int[5];
// 直接代入
int[] arr = {1, 2, 3, 4, 5};
例:配列の初期化
JAVA
public class ArrayInit {
public static void main(String[] args) {
// 方法1:サイズを指定
int[] arr1 = new int[3];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
// 方法2:直接代入
int[] arr2 = {10, 20, 30};
// 方法3:new + 代入
int[] arr3 = new int[]{10, 20, 30};
System.out.println(arr2[0]); // 10
System.out.println(arr2[1]); // 20
System.out.println(arr2[2]); // 30
}
}
⚠️ 注意: 配列のインデックスは0から始まります。最大インデックスは長さ-1です。範囲外へのアクセスは
ArrayIndexOutOfBoundsExceptionをスローします。
アクセスと変更
JAVA
int[] arr = {10, 20, 30, 40, 50};
// 要素にアクセス
int first = arr[0]; // 10
int third = arr[2]; // 30
// 要素を変更
arr[1] = 200; // 20を200に変更
// 配列の長さを取得
int len = arr.length; // 5
配列の走査
方法1:通常のforループ
JAVA
int[] arr = {10, 20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
方法2:for-eachループ
JAVA
int[] arr = {10, 20, 30, 40, 50};
for (int num : arr) {
System.out.println(num);
}
例:平均値の計算
JAVA
public class ArrayAverage {
public static void main(String[] args) {
int[] scores = {85, 92, 78, 96, 88};
int sum = 0;
for (int score : scores) {
sum += score;
}
double avg = (double) sum / scores.length;
System.out.println("平均値: " + avg); // 87.8
}
}
Arraysユーティリティクラス
java.util.Arraysは配列操作のためのユーティリティメソッドを提供します。
一般的なメソッド
| メソッド | 説明 | 例 |
|---|---|---|
sort() |
ソート | Arrays.sort(arr) |
copyOf() |
コピー | Arrays.copyOf(arr, newLen) |
fill() |
埋める | Arrays.fill(arr, value) |
equals() |
比較 | Arrays.equals(arr1, arr2) |
toString() |
文字列に変換 | Arrays.toString(arr) |
binarySearch() |
二分探索 | Arrays.binarySearch(arr, key) |
例:Arraysの使用
JAVA
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 1, 9, 3};
// ソート
Arrays.sort(arr);
System.out.println("ソート後: " + Arrays.toString(arr));
// [1, 2, 3, 5, 8, 9]
// コピー
int[] arr2 = Arrays.copyOf(arr, 3);
System.out.println("最初の3つ: " + Arrays.toString(arr2));
// [1, 2, 3]
// 埋める
int[] arr3 = new int[5];
Arrays.fill(arr3, 100);
System.out.println("埋めた後: " + Arrays.toString(arr3));
// [100, 100, 100, 100, 100]
// 検索(最初にソートが必要)
int index = Arrays.binarySearch(arr, 5);
System.out.println("5のインデックス: " + index); // 3
}
}
二次元配列
二次元配列は「配列の配列」と考えることができます。
宣言と初期化
JAVA
// 方法1:サイズを指定
int[][] matrix = new int[3][4]; // 3行4列
// 方法2:直接代入
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
例:二次元配列の走査
JAVA
public class TwoDArrayDemo {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 走査
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
// 出力:
// 1 2 3
// 4 5 6
// 7 8 9
}
}
例:行列の転置
JAVA
public class MatrixTranspose {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
// 転置: 2行3列 → 3行2列
int[][] transposed = new int[3][2];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
transposed[j][i] = matrix[i][j];
}
}
// 転置された行列を表示
for (int[] row : transposed) {
System.out.println(java.util.Arrays.toString(row));
}
// [1, 4]
// [2, 5]
// [3, 6]
}
}
Varargs(可変長引数)
Varargsにより、メソッドが可変数の引数を受け取ることができます。
構文
JAVA
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
例:Varargs
JAVA
public class VarargsDemo {
public static void main(String[] args) {
System.out.println(sum(1, 2)); // 3
System.out.println(sum(1, 2, 3)); // 6
System.out.println(sum(1, 2, 3, 4, 5)); // 15
}
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
}
⚠️ 注意: Varargsはメソッドの最後のパラメータでなければならず、メソッドには1つのvarargsパラメータしか持つことができません。
一般的な配列アルゴリズム
例:バブルソート
JAVA
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 1, 9, 3};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(java.util.Arrays.toString(arr));
// [1, 2, 3, 5, 8, 9]
}
}
例:最大値を見つける
JAVA
public class FindMax {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 1, 9, 3};
int max = arr[0];
for (int num : arr) {
if (num > max) {
max = num;
}
}
System.out.println("最大値: " + max); // 9
}
}
❓ よくある質問
Q 配列のサイズは変更できますか?
A いいえ。配列のサイズは固定です。動的なサイズが必要な場合は、ArrayListを使用してください。
Q 配列にはデフォルト値がありますか?
A はい。intは0、doubleは0.0、booleanはfalse、参照型はnullです。
Q Arrays.sort()はどのソートアルゴリズムを使用していますか?
A プリミティブ型にはデュアルピボットクイックソート、オブジェクトにはTimSort(マージソートの変種)を使用しています。
📖 まとめ
- 配列は同じ型の固定サイズのコレクションで、インデックスは0から始まる
- 通常のforまたはfor-eachループで走査
- Arraysユーティリティクラスはソート、コピー、フィルなどのメソッドを提供
- 二次元配列は配列の配列と考えることができる
- Varargsにより、メソッドが可変数の引数を受け取ることができる
📝 演習
- 配列操作: 10個の要素を持つ配列を作成し、1-10の値を割り当て、逆順で表示
- 最大値/最小値: 配列の最大値と最小値を見つける
- バブルソート: バブルソートアルゴリズムを実装し、配列を昇順にソート
次のレッスン
次のレッスンでは、実践:基礎を学びます — 最初の7レッスンの知識を適用します。



