Javaにおける配列の宣言と初期化方法とは?
- SE
- Javaで配列を利用する際には、どのようなことが必要なのでしょうか?
- PM
- 宣言、領域確保、初期化の処理が必要です。
目次
Javaにおける配列
配列とは、複数の値を1つのまとまりとして扱うためのデータ構造です。Javaの配列では、同じ型のデータを扱い、intやdoubleなどの基本型の他に、Stringなど参照型のデータも扱えます。この記事では、Javaプログラミングの配列の使い方の基本を学ぶため、配列の宣言と初期化方法についてコード例を用いて解説していきます。
1次元配列の宣言と初期値の設定方法
Javaの1次元配列では、a[2]やa[i](aは配列名)のように、角括弧[ ]による添え字を付けて、各々の要素(配列に格納されている値)を参照できます。このように配列を利用する前に、配列の宣言と初期化が必要となるため、その方法について説明します。
配列の宣言方法
Javaでの1次元配列宣言の書き方には、次の2通りがあります。型名[] 配列名; または 型名 配列名[];例えば、int型の1次元配列xとyの宣言は、次のように書けます。例: int[] x; int y[];以降、この記事内では、一番目の記述法に従っていきます。1次元配列の宣言例を記載します。
1
|
int[] x;String[] s;short[] b;
|
配列の領域を確保する
基本型の変数では、例えば、”int y;” のように変数を宣言するとその値を格納する領域が確保されます。配列の場合には、宣言だけでは、要素データの型(int)と、1次元配列であることが宣言されただけで、サイズが指定されておらず、配列の値を格納する領域は確保されていません。領域確保はnew演算子を用いて、次のように記述します。例では、5個の整数領域が確保され、配列変数xがその領域を参照するようになります。配列名 = new 型名[要素数];例: x = new int[5];宣言と領域の確保をまとめて、次の一文で書くこともできます。型名[] 配列名 = new 型名[要素数];例: int[] x = new int[5];
代入文により配列を初期化する
配列を宣言し領域が確保されたら、各要素に値を設定して初期化します。要素数3の整数型配列aを宣言し値を設定するコードは、次のように書けます。Javaでは配列の添え字は0からなので、サイズ3の配列の添え字は0, 1, 2となります。
1
|
int[] a = new int[3];a[0] = 20; a[1] = 80; a[2] = 50;
|
配列の要素数が多い場合には、ループを用いて全要素を処理します。1次元配列を初期化するループコードの例を示します。
1
|
public class InitArray01 { public static void main(String[] args) { // 1000要素の整数配列を宣言 int a[] = new int[1000]; // 値を初期化 for (int i = 0; i < 1000; i++) { a[i] = 2000 - i; } // 値を確認 a[100]: 1900 System.out.println(""a[100]: "" + a[100]); }}
|
初期化子を使った配列初期化方法
配列宣言および領域確保と同時に初期値を設定したい場合には、次のような初期化子を用いた方法があります。型名[ ] 配列名 = { 値1, 値2, 値3 };中括弧{…}の中に値を並べることで、配列のサイズと初期値を指定できます。整数配列と文字列配列の初期化コード例を示します。
1
|
public class InitArray02 { public static void main(String[] args) { // 初期化子を使ったint配列の初期化 int a[] = {20, 80, 50, 77, 1}; // 初期化子を使ったString配列の初期化 String s[] = {""apple"", ""orange"", ""banana""}; // 値を確認 a[3]: 77 s[2]: banana System.out.println(""a[3]: "" + a[3]); System.out.println(""s[2]: "" + s[2]); }}
|
2次元配列の宣言と初期化方法
表形式のデータを扱う場合などに2次元配列を使います。Javaの2次元配列のデータは、a[1][3]のように、2つの添え字を用いて参照します。2次元配列の初期化方法をご説明します。
2次元配列の代入による初期化例
Javaで2次元配列を宣言し領域を確保する文は、次の形です。型名[][] 配列名 = new 型名[要素数1][要素数2];2×3の2次元配列に値を代入するコード例を示します。
1
|
public class InitArray03 { public static void main(String[] args) { // 2×3の整数型配列を宣言 int[][] a = new int[2][3]; // 値を初期化 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { a[i][j] = i*10+j; } } // 値を確認 a[1][2]: 12 System.out.println(""a[1][2]: "" + a[1][2]); }}
|
2次元配列で初期化子を用いる方法
2次元配列の場合にも、初期化子を用いて値を指定することができます。各行の値を中括弧{…}の中に並べ、さらに外側に{ }を置くことで、2次元構造に対応する値を指定します。初期化子を使った整数と文字列の2次元配列初期化コードの例を示します。
1
|
public class InitArray04 { public static void main(String[] args) { // 2次元整数型配列の宣言と初期化 int[][] a = { {0, 1, 2}, {10, 11, 12} }; // 2次元文字型配列の宣言と初期化 String[][] s = { {""apple"", ""orange"", ""banana"", ""pineapple""}, {""cat"", ""dog"", ""bird"", ""fish""}, }; // 値を確認 a[1][2]: 12 System.out.println(""a[1][2]: "" + a[1][2]); // 値を確認 s[1][2]: bird System.out.println(""s[1][2]: "" + s[1][2]); }}
|
2次元配列は「配列の配列」
Javaの2次元配列は、配列の各要素がさらに配列を参照している形になっています。すなわち、「配列の配列」です。例えば2×3の整数型配列aの宣言文int[][] a = new int[2][3];は、次のように4つの文に分けて書くこともできます。
1
|
int[][] a; // aは整数型の2次元配列a = new int[2][]; // aは要素数2のint[]型(intの配列)を要素とする配列a[0] = new int[3]; // aの要素a[0]は要素数3のint配列を参照a[1] = new int[3]; // aの要素a[1]は要素数3のint配列を参照
|
Javaの2次元配列では、変数が参照する各要素が、さらに配列を参照している形で実装されています。
行毎にサイズが異なる配列
2次元配列が「配列の配列」を表していることから、配列の各行で異なる要素数の配列を参照することもできます。次の例では、a[0]はサイズ3の配列を、a[1]はサイズ4の配列を持っていると考えられます。
1
|
int[][] a; // aは整数型の2次元配列a = new int[2][]; // aは要素数2のint[]型(intの配列)を要素とする配列a[0] = new int[3]; // aの要素a[0]は要素数3のint配列を参照a[1] = new int[4]; // aの要素a[1]は要素数4のint配列を参照
|
このような配列を初期化するために、ループを用いて値を設定するコード例を示します。a[i]の要素数は一定ではないため、lengthを用いて配列の要素数を取得しています。
1
|
for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { a[i][j] = i * 10 + j; }}
|
3次元以上の多次元配列の初期化
3次元以上の多次元配列の場合も、2次元配列と同様です。4×3×2の3次元配列を初期化し、これを用いて宣言するコード例を示します。
1
|
int[][][] a = { {{0, 1}, {10, 11}, {20,21}}, {{100, 101}, {110, 111}, {120,121}}, {{200, 201}, {210, 211}, {220,221}}, {{300, 301}, {310, 311}, {320,321}}};
|
- SE
- Javaの配列利用方法は、さまざまなものがあるのですね。
- PM
- そうですね。Javaの配列を上手に利用してみましょう!
Javaの配列初期化方法を知ろう!
Javaで配列を利用する際には、データの型と配列の構造を宣言し、メモリ上の領域確保を行った後、各要素の値を初期化します。初期化は、通常は代入文により値を設定しますが、初期化子を用いると、宣言と同時に初期値の設定が可能です。