Javaにおける配列の宣言と初期化方法とは?
- システム
エンジニア - Javaで配列を利用する際には、どのようなことが必要なのでしょうか?
- プロジェクト
マネージャー - 宣言、領域確保、初期化の処理が必要です。
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
2
3
|
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
2
3
4
|
int[] a = new int[3];
a[0] = 20;
a[1] = 80;
a[2] = 50;
|
配列の要素数が多い場合には、ループを用いて全要素を処理します。1次元配列を初期化するループコードの例を示します。
1
2
3
4
5
6
7
8
9
10
11
12
|
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
2
3
4
5
6
7
8
9
10
11
|
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
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
2
3
4
|
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
2
3
4
|
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
2
3
4
5
|
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
2
3
4
5
6
|
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}}
};
|
- システム
エンジニア - Javaの配列利用方法は、さまざまなものがあるのですね。
- プロジェクト
マネージャー - そうですね。Javaの配列を上手に利用してみましょう!
Javaの配列初期化方法を知ろう!
Javaで配列を利用する際には、データの型と配列の構造を宣言し、メモリ上の領域確保を行った後、各要素の値を初期化します。初期化は、通常は代入文により値を設定しますが、初期化子を用いると、宣言と同時に初期値の設定が可能です。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)