HOWTO · Java

Java で配列を宣言する

この記事では、Java で配列を宣言する方法を紹介します。

このページの内容

配列を宣言するには、要素型の後に [] を付けます。たとえば int[] scores; のように書きます。これは変数の宣言です。配列自体は、長さを指定して別に作成するか、値を使って初期化します。

1次元配列を宣言する

配列は、同じ型の値を固定個数格納します。配列変数を宣言すると配列型が決まりますが、配列オブジェクトが作成されたり、長さが決まったりするわけではありません。よく使われる宣言方法は int[] scores; と int scores[]; の2つです。前者は要素型の隣に角括弧を置く慣例的な書き方ですが、どちらも有効です。ローカル変数を宣言した後は、要素を読み書きする前に配列を代入してください。

次の例を実行してください。コード内の表示ラベルは、コードのバイト単位の一致を保つため英語のままです。

import java.util.Arrays;

public class DeclareAnArray {
  public static void main(String[] args) {
    int[] scores = new int[3];
    scores[0] = 18;
    scores[1] = 24;
    scores[2] = 31;
    System.out.println(Arrays.toString(scores));
  }
}

この例は実行可能なコードとして示していますが、ここには実行結果は含まれていません。new int[3] は3つの要素を持つ配列を作成し、その参照を scores に代入します。新しく作成された int 配列の各要素は 0 で始まるため、代入によってその初期値が置き換わります。配列のインデックスは 0 から始まり、最後に有効なインデックスは長さより1小さい値です。配列の長さは作成時に固定されます。要素数を変えるには、別の配列を作成してください。

1次元配列を初期化する

値がすでに決まっている場合は、中括弧の初期化子を使って、1つの文で配列を宣言して初期化できます。たとえば int[] scores = {18, 24, 31}; と書きます。Javaは値の個数から長さを決め、値を順にインデックス 0、1、2 に格納します。この簡潔な形式は宣言と一緒に使います。変数を先に宣言してある場合は、後から値を代入するときに、明示的な配列生成式を使います。たとえば scores = new int[] {18, 24, 31}; と書きます。scores = {18, 24, 31}; のような中括弧だけのリストは、単独の代入文としては無効です。

初期化子をより長い式の中で使う場合も、明示的な形式なら配列の生成が分かりやすくなります。宣言と代入を同時に行うかどうかに応じて形式を選んでください。どちらの形式でも、指定した値の個数と同じ長さの配列が作成されます。長さだけを指定して値を与えずに数値配列を作成すると、Javaは各要素にその型の既定値を設定します。たとえば int の要素は 0、boolean は false、参照型の要素は null になります。この既定値は配列の要素に適用されます。配列がまだ代入されていないローカル変数に適用されるわけではありません。

IntStreamから配列を作成する

IntStream は、連続した数列や選んだ数値のリストから int[] を作成できます。java.util.stream.IntStream からインポートします。連続した数列の場合、IntStream.range(0, 5).toArray() は {0, 1, 2, 3, 4} を返します。開始値は含まれ、終了値は含まれません。そのため、開始値が終了値より小さい場合、生成される値の個数は両者の差になります。toArray はストリームを消費し、プリミティブ型の整数配列を返します。

特定の値を使う場合は、IntStream.of(2, 5, 3, 8).toArray() と書きます。値の順序を保った int[] を返し、並べ替えや重複の削除は行いません。たとえば int[] sequence = IntStream.range(0, 5).toArray(); のように、どちらの式も int[] 型の変数に代入できます。ストリーム式が値の取得方法をすでに表している場合に便利です。短い固定リストには、中括弧の初期化子のほうが見やすいこともあります。これらはJava APIの例であり、Javaのバージョンについては述べていません。

2次元配列を宣言する

Javaでは、2次元配列は要素自体が配列である配列として表されます。int[][] grid; はその型の変数を宣言します。int[][] grid = new int[2][3]; と書くと、2つの行配列を持つ外側の配列が作成され、各行には3つの整数要素が入ります。この生成で指定する2つのサイズは、行数と各行の要素数です。各要素の初期値は 0 です。

入れ子の中括弧を使えば、たとえば int[][] grid = {{1, 2, 3}, {4, 5, 6}}; のように、長方形の配列を初期化できます。外側の中括弧には行が入り、それぞれの内側のリストが1行分の値を指定します。grid[1][2] のように2つのインデックスで要素にアクセスできます。この例では2行目の3番目の値を選びます。行はそれぞれ別の配列なので、長さが異なる行も使用できます。たとえば int[][] rows = new int[2][]; は外側の配列だけを作成します。各行の要素にアクセスする前に、それぞれの行へ配列を代入してください。この配列の配列という構造により、2次元配列は必ずしも長方形の格子状である必要はありません。