このチャプターの目次
配列とは
- 配列:同じ型の複数のデータを入れることができるもの
- データ型の一種
- 配列は、複数のデータを入れることができる
※変数は、配列とは異なり、データ型ではない。また、1つのデータしか格納することができない。
用語
- 配列の宣言:配列を作成(定義)すること(変数の宣言と似ている)
- 1次元配列:1列の配列のこと
- 多次元配列:2列以上の配列のこと
- 要素:配列内の1つ1つのデータのこと
- インデックス:配列の何番目の要素なのかを表現するもの。0スタート(つまり、インデックス=要素順-1)。
配列の作成
配列の作成方法は、大きく2パターンある。
- 配列の作成方法
- ①配列の宣言と代入を別々に行う
- ②配列の宣言と代入を同時に行う(一般的)
①配列の宣言と代入を別々に行う
- 配列の宣言:
データ型[] 配列変数名;
- 配列変数:配列を格納する変数のこと
- 配列に格納するデータの型とその左に[]をつけることで配列であることを知らせる
データ型 配列変数名[];
でもok
- 代入
配列変数名 = new データ型[要素数];
- 配列クラスをインスタンス化し(new データ型[];)、宣言した変数に代入する
- クラスのインスタンス化については、別の章で説明する
確保した領域全てに、データを代入しなくても問題ない。以下で言えばarr[0]のみ代入していても問題なく出力できる。ただし、代入していないインデックスを参照する場合は、実行エラーになる。
Training.java
class Training {
public static void main(String[] args){
String[] arr; //配列変数の宣言
arr = new String[3]; //配列のインスタンス化
arr[0] = "apple"; //要素の追加(配列の0番目に)
arr[1] = "lemon"; //要素の追加(配列の1番目に)
arr[2] = "banana"; //要素の追加(配列の2番目に)
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//System.out.println(arr); 出力結果:[Ljava.lang.String;@7ad041f3
}
}
//出力結果:
//apple
//lemon
//banana
※静的型付け言語なので、変数に配列型を格納すること、さらにその配列の要素のデータ型も指定する必要がある。(変数 = 配列変数)
※arr = new String[];
だと要素数を指定していないのでコンパイルエラー
②配列の宣言と代入を同時に行う(一般的)
配列を用いる際は、この書き方が一般的
- 配列の宣言と代入:
データ型[] 配列変数 = {要素1, 要素2, ...};
Training.java
class Training {
public static void main(String[] args){
String[] arr = {"apple", "lemon", "banana"}; //配列の宣言と代入
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//System.out.println(arr); 出力結果:[Ljava.lang.String;@7ad041f3
}
}
//出力結果:
//apple
//lemon
//banana
配列の初期値
配列を生成すると、その配列のデータ型に合わせて自動でインデックス0番目の要素が決まる。
配列でなく、空の場合はコンパイルエラーになるので注意。
配列だから初期値が生成されることを覚えておく。
データ型 | 初期値 |
---|---|
byte, short, int, long | 0 |
float, double | 0.0 |
char | /u0000 |
boolean | false |
参照型 | null |
以下では、int型の配列を生成した例である。配列の0番目の要素に値を代入していないのに関わらず、0が入っていることがわかる。
Training.java(int型の具体例)
class Training {
public static void main(String[] args){
int[] arr = new int[1];
System.out.println(arr[0]); //初期値の自動生成
}
}
//出力結果:0
配列の要素の変更
以下では、配列arrの1番目の要素をorangeに変更している。
- arr[1]を参照して、その要素を上書きしているイメージ
Training.java
class Training {
public static void main(String[] args){
String[] arr = {"apple", "lemon", "banana"};
arr[1] = "orange"; //要素1を上書き
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
//出力結果:
//apple
//orange
//banana
多次元配列
配列の宣言と代入を別々に行う場合と、同時に行う場合で多次元配列を作成する。
1次元配列とほぼ同じなので説明は省略。
Trining.java(①配列の宣言と代入を別々に行う)
class Training {
public static void main(String[] args){
String[][] arr;
arr = new String[2][2];
arr[0][0] = "apple1";
arr[0][1] = "apple2";
arr[1][0] = "apple3";
arr[1][1] = "apple4";
System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[1][0]);
System.out.println(arr[1][1]);
}
}
//出力結果:
//apple1
//apple2
//apple3
//apple4
Trining.java(②配列の宣言と代入を同時に行う(一般的))
class Training {
public static void main(String[] args){
String[][] arr = {{"apple1", "apple2"}, {"apple3", "apple4"}};
System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[1][0]);
System.out.println(arr[1][1]);
}
}
//出力結果:
//apple1
//apple2
//apple3
//apple4
**※
- 要素数が揃っていなくても問題なく配列を生成できる。(例:
String[][] arr = {{"apple1", "apple2"}, {"apple3"}};
) - また、1次元目の配列の領域確保のみ行い、後から2次元目の配列の領域確保を行うことも可能。(例:int [][] arr = new int[3][];)
- 1次元目の配列の領域は省略できない(コンパイルエラー)
コマンドライン引数
- コマンドライン引数:javaコマンド実行時にプログラムへ渡すことができる値のこと。
- main()メソッドがString型の配列として値を受け取る。
①String型配列の生成・受け渡し
実行時に、コマンドライン引数に渡したデータ(tanaka)を格納した、String型の配列を生成し、main()メソッドに渡す。
数値を渡しても文字列として扱われる。
$ javac Training.java
$ java Training tanaka ←実行時に値を格納したString型の配列を作成
tanaka
②String型配列の受け取り
渡されたString型の配列をargs
という引数で受け取る。
Training.java
class Training {
public static void main(String[] args){
System.out.println(args[0]);
}
}