配列[Array]は、同じデータ型の複数の値を1つの変数に格納するためのデータ構造です。Javaにおける配列は固定長で、一度作成するとそのサイズを変更することはできないという特徴を持ちます。配列の各要素には、インデックス(添え字)を使ってアクセスし、インデックスは0から始まり、配列の長さ-1までの整数で表します。
例えば、整数を格納するための配列を考えてみましょう。配列を使うことで、複数の整数値を1つの変数にまとめて管理することができ、個々の値にアクセスしたり、変更したりするのが簡単になります。
// 整数型の配列を宣言して初期化 int[] numbers = {1, 2, 3, 4, 5}; // 配列の要素にアクセス System.out.println(numbers[0]); // 出力: 1 System.out.println(numbers[4]); // 出力: 5
↑は、numbers
という配列に5つの整数値を格納。numbers[0]
は配列の最初の要素(1)を、numbers[4]
は配列の最後の要素(5)を示しています。
配列を使うことで、複数の関連するデータを効率的・操作することが可能になります。この特性を理解して、適切な場面で配列を活用できるようになりましょう。
関連 Javaの1stステップ:基本的な構文ルールを1分で復習!
配列の宣言と初期化
Javaで配列を使うためには、①配列の宣言、②初期化というステップを踏む必要があります。ここでは、配列の宣言と初期化の基本的な方法についてご説明します。
配列の宣言
配列を宣言するというのは、配列の名前とそのデータ型をJavaに教えるということです。例えば、整数型の配列を宣言するには次のように書きます。
int[] numbers;
int
はデータ型を、[]
は配列であることを示しており、numbers
が配列の名前です。
配列の初期化
配列を宣言しただけでは、実際にデータを格納するためのメモリが割り当てられていません。データを格納するためには配列の初期化を行う必要があります。初期化にはいくつかの方法があります。
パターン1 サイズを指定して初期化
配列のサイズ(要素数)を指定して初期化する方法です。この方法では、配列の各要素はデフォルト値(整数の場合は0)で初期化されます。以下の方法で、5つの整数を格納できる配列 numbers
が作成されます。
// 配列の宣言 int[] numbers; // 配列の初期化 numbers = new int[5];
パターン2 宣言と同時に初期化
配列を宣言すると同時に、初期化する方法もあります。この方法では、配列の各要素を具体的な値で初期化。以下の通りに記述すると、要素として1から5までの値を持つ配列 numbers
が作成されます。
int[] numbers = {1, 2, 3, 4, 5};
配列の宣言&初期化自体は難しくありません。以下のコードだけ頭に入っていればOK。
// 配列の宣言 int[] scores; // 配列の初期化 scores = new int[3]; // 3つの要素を持つ配列を初期化 // 宣言と同時に初期化 int[] ages = {18, 21, 25}; // 3つの値を持つ配列を作成
多次元配列
Javaでは、配列の中に配列を持つことができるため、複数の次元を持つ多次元配列を作成できます。最も一般的な多次元配列は二次元配列で、これは表やマトリックスのようなデータを扱うのに便利です。
二次元配列の宣言と初期化
二次元配列を宣言するには、次のように書きます。int
はデータ型を、[][]
は二次元配列であることを示しています。
int[][] matrix;
二次元配列についても初期化が必要です。考え方は通常の配列と同様です。
// 二次元配列の宣言 int[][] matrix; // 二次元配列の初期化 matrix = new int[2][3]; // 2行3列の二次元配列を作成 // 宣言と同時に初期化 int[][] scores = { {80, 90, 100}, {70, 85, 95} };
多次元配列を使うことで、表形式のデータや複雑なデータ構造を効率的に管理できるようになります。例えば、表形式のデータ(成績表など)やグリッド状のデータ(画像のピクセル情報など)を扱う場合に便利です。
二次元配列だけでなく、三次元以上の配列も作成できますが、使用する際には配列の次元が増えるほど管理が複雑になるため、適切な使い分けが必要です。
配列の要素へのアクセス
続けて、作成した配列に対する操作系を諸々ご説明します。基本的にどのような操作でも共通して、配列内の各要素にアクセスするためにはインデックス(添え字)を使用する、というのが基本ルールです。
要素の取得
配列の要素を取得するには、配列名の後に角括弧 []
を使い、取得したい要素のインデックスを指定します。
int[] numbers = {10, 20, 30, 40, 50}; int firstElement = numbers[0]; // 最初の要素(10) int thirdElement = numbers[2]; // 3番目の要素(30)
要素の設定
配列の要素を設定するには、同じく角括弧 []
を使って要素のインデックスを指定し、新しい値を代入します。
int[] numbers = {10, 20, 30, 40, 50}; numbers[1] = 25; // 2番目の要素を25に設定 numbers[4] = 55; // 5番目の要素を55に設定
二次元配列の要素へのアクセスと設定
二次元配列の要素にアクセスするには、行と列のインデックスを指定します。
// 宣言と同時に初期化 int[][] scores = { {80, 90, 100}, {70, 85, 95} }; // 要素へのアクセス int firstScore = scores[0][0]; // 1行目の1列目の要素(80) scores[1][2] = 99; // 2行目の3列目の要素を99に設定
配列の長さの取得
列の長さを取得するために length
プロパティを使用します。配列の長さは、その配列に含まれる要素の数を示します。
int[] numbers = {10, 20, 30, 40, 50}; int length = numbers.length; System.out.println("Array length: " + length); // 出力: Array length: 5
配列のループ処理
配列の全ての要素にアクセスするために、forループや拡張forループ(foreachループ)を使います。
サンプルコード1 forループ
int[] numbers = {10, 20, 30, 40, 50}; System.out.println("Array elements (for loop):"); for (int i = 0; i < numbers.length; i++) { System.out.println("Element at index " + i + ": " + numbers[i]); } // 出力: // Element at index 0: 10 // Element at index 1: 20 // Element at index 2: 30 // Element at index 3: 40 // Element at index 4: 50
サンプルコード2 拡張forループ
int[] numbers = {10, 20, 30, 40, 50}; System.out.println("Array elements (foreach loop):"); for (int number : numbers) { System.out.println("Element: " + number); } // 出力: // Element: 10 // Element: 20 // Element: 30 // Element: 40 // Element: 50
参考 Javaのfor文:繰り返し処理の基本から応用までを3分で解説
配列のコピー
配列の内容を別の配列にコピーするには、Arrays.copyOf
メソッドを使用します。このメソッドは、元の配列の内容を指定された長さの新しい配列にコピーします。
int[] numbers = {10, 20, 30, 40, 50}; int[] numbersCopy = Arrays.copyOf(numbers, numbers.length); System.out.println("Copied array elements:"); for (int number : numbersCopy) { System.out.println("Element: " + number); } // 出力: // Element: 10 // Element: 20 // Element: 30 // Element: 40 // Element: 50
配列のソート
配列の要素を昇順に並べ替えるには、Arrays.sort
メソッドを使用します。
int[] numbers = {50, 20, 40, 10, 30}; Arrays.sort(numbers); System.out.println("Sorted array elements:"); for (int number : numbers) { System.out.println("Element: " + number); } // 出力: // Element: 10 // Element: 20 // Element: 30 // Element: 40 // Element: 50
配列の検索
特定の要素が配列内に存在するかどうかを調べるには、Arrays.binarySearch
メソッドを使用します。このメソッドを使用する前には、事前に配列をソートしておく必要があります。
int[] numbers = {10, 20, 30, 40, 50}; int index = Arrays.binarySearch(numbers, 30); if (index >= 0) { System.out.println("Element found at index: " + index); // 出力: Element found at index: 2 } else { System.out.println("Element not found"); } index = Arrays.binarySearch(numbers, 25); if (index >= 0) { System.out.println("Element found at index: " + index); } else { System.out.println("Element not found"); // 出力: Element not found }
配列の長さの取得、配列のループ処理、配列のコピー、配列のソート、配列の検索について詳しく解説しました。これらの操作を理解することで、Javaの配列を効果的に利用できるようになります。