1. 概要

このクイックチュートリアルでは、配列を初期化するさまざまな方法と、それらの微妙な違いについて説明します。

2. 一度に1つの要素

単純なループベースの方法から始めましょう。

for (int i = 0; i < array.length; i++) {
    array[i] = i + 2;
}

また、多次元配列を一度に1要素ずつ初期化する方法についても説明します。

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 5; j++) {
        array[i][j] = j + 1;
    }
}

3. 宣言時

次に、宣言時に配列を初期化します。

String array[] = new String[] { 
  "Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" };

配列をインスタンス化するときに、そのタイプを指定する必要はありません。

int array[] = { 1, 2, 3, 4, 5 };

このアプローチを使用して、宣言後に配列を初期化することはできないことに注意してください。 そうしようとすると、コンパイルエラーが発生します。

4. Arrays.fill()の使用

java.util.Arrays クラスには、 fill()、という名前のメソッドがいくつかあり、さまざまなタイプの引数を受け入れ、配列全体に同じ値を入力します。

long array[] = new long[5];
Arrays.fill(array, 30);

この方法には、配列の範囲を特定の値に設定するいくつかの選択肢もあります。

int array[] = new int[5];
Arrays.fill(array, 0, 3, -50);

このメソッドは、配列、最初の要素のインデックス、要素の数、および値を受け入れることに注意してください。

5. Arrays.copyOf()の使用

メソッドArrays.copyOf()は、別の配列をコピーして新しい配列を作成します。 このメソッドには多くのオーバーロードがあり、さまざまなタイプの引数を受け入れます。

簡単な例を見てみましょう。

int array[] = { 1, 2, 3, 4, 5 };
int[] copy = Arrays.copyOf(array, 5);

ここにいくつかの注意:

  • このメソッドは、ソース配列と作成されるコピーの長さを受け入れます。
  • 長さがコピーされる配列の長さよりも大きい場合、追加の要素はデフォルト値を使用して初期化されます。
  • ソース配列が初期化されていない場合は、NullPointerExceptionがスローされます。
  • 最後に、ソース配列の長さが負の場合、NegativeArraySizeExceptionがスローされます。

6. Arrays.setAll()の使用

メソッドArrays.setAll()は、ジェネレーター関数を使用して配列のすべての要素を設定します。

int[] array = new int[20];
Arrays.setAll(array, p -> p > 9 ? 0 : p);

// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

ジェネレーター関数がnullの場合、NullPointerExceptionがスローされます。

7. ArrayUtils.clone()の使用

最後に、Apache Commons Lang3のArrayUtils.clone() APIを利用して、別の配列の直接コピーを作成して配列を初期化します。

char[] array = new char[] {'a', 'b', 'c'};
char[] copy = ArrayUtils.clone(array);

このメソッドは、すべてのプリミティブタイプに対してオーバーロードされることに注意してください。

8. 結論

この短い記事では、Javaで配列を初期化するさまざまな方法について説明しました。

いつものように、コードのフルバージョンはGitHubから入手できます。