Chapter 08

配列(データ型)

KeitoYuasa
KeitoYuasa
2023.02.12に更新

配列とは

  • 配列:同じ型の複数のデータを入れることができるもの
  • データ型の一種
  • 配列は、複数のデータを入れることができる

※変数は、配列とは異なり、データ型ではない。また、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]);
    }
}