配列は、同じ型の要素の固定サイズの順序付きコレクションであり、メモリに連続して格納されます。配列は基本的ですが、サイズが固定されているため、動的コレクションにはArrayListを使用することが多いです。
配列の宣言と作成
java
[] nums = [];
[] nums2 = {, , , , };
String[] names = [];
nums[] = ;
nums[];
nums.length;
配列は作成時に設定された固定サイズを持ちます。配列のサイズは変更できません。要素はタイプに適したデフォルト値(0、0.0、false、null)に初期化されます。
nums.length; // ✅ array — a field (no parentheses)
str.length(); // ✅ String — a method (parentheses)
list.size(); // ✅ collection — a method
配列のlengthはフィールドです。Stringのlength()とコレクションのsize()はメソッドです。これは混乱しやすいポイントです。
int[] arr = {1, 2, 3};
arr[5]; // ❌ ArrayIndexOutOfBoundsException — Java checks bounds at runtime
Javaは範囲外アクセスで例外をスローします(Cのような未定義動作ではなく)。より安全ですが、0からlength-1の範囲内に留まる必要があります。
// enhanced for-each (when you don't need the index)
for (int n : nums) {
System.out.println(n);
}
// traditional for (when you need the index)
for (int i = 0; i < nums.length; i++) {
nums[i] *= 2;
}
int[][] matrix = {{1, 2}, {3, 4}}; // array of arrays
matrix[0][1]; // 2
Array → fixed size, slightly faster, can hold primitives directly (int[])
ArrayList → DYNAMIC size (grow/shrink), rich methods (add/remove/contains),
but holds objects only (Integer, not int)
List<Integer> list = new ArrayList<>();
list.add(1); // grows dynamically — no fixed size
list.remove(0);
固定サイズ、パフォーマンスに敏感、またはプリミティブデータの場合は通常の配列を使用します。サイズが変わる場合や便利な操作が必要な場合はArrayListを使用します。
配列はJavaの基本的なデータ構造です。高速で、メモリ効率が良く、連続したストレージを直接使用し、多くのコレクション(ArrayListは配列をラップ)の基となります。
それらの固定サイズの性質、0ベースのインデックス、実行時の境界チェック、lengthフィールド(対メソッド)の落とし穴、特に配列 vs ArrayListをいつ使うか(固定/プリミティブ/高速 対 動的/便利)を理解することは不可欠です。
配列はアルゴリズムとパフォーマンスクリティカルなコードに常に現れ、その制限(リサイズできない)を理解することで、動的コレクションが存在し、通常は一般的な用途で推奨される理由が説明されます。