コンテンツにスキップ

Java オブジェクトの配列

配列の確保

int型の配列は以下のように宣言します。

int[] nums;

クラス型の配列は以下のような宣言になります。

Hero[] heros;

int型の配列で要素3個を確保するには以下のようにします。

int[] nums = new int[3];

クラス型の配列の場合、以下のようなになります。

Hero[] heros = new Hero[3];

int型の配列では要素を確保するとすぐ使用できます。

nums[0] = 10;

しかし、Hero型の配列では要素を確保しただけでは、それはHero型の入れ物を確保しただけに過ぎません。つまり、Heroそのものはnewしていないので、インスタンスは生成されていません。 最初はnullが入っているだけです。ですから、以下は実行時エラー(例外)となります。

heros[0].name = "田中";

確保した要素にnewでインスタンスを入れる必要があります。

heros[0] = new Hero();
heros[1] = new Hero();
heros[2] = new Hero();

配列の初期化

int型の配列は以下のように初期化可能です。

int[] nums = {5,9,7};

Hero型の配列の初期化はそれぞれの要素にnewでオブジェクトを入れます。

Hero[] heros = {
    new Hero("田中"), 
    new Hero("山田"), 
    new Hero("鈴木")
};

配列の利用

int型の配列を通常のfor文で以下のように利用します。

for(int i=0; i<3; i++){
    System.out.println( nums[i] );
}

Hero型であれば、以下のように利用します。

for(int i=0; i<3; i++){
    System.out.println( heros[i].name );
}

int型の配列を拡張for文であれば以下のように利用します。

for(int n : nums){
    System.out.println( n );
}

Hero型であれば、以下のように利用します。

for(Hero h : heros){
    System.out.println( h.name );
}

ArrayList

配列はあとで要素を増やしたり削除したりすることは出来ません。 実際のデータは最初からデータ数を予測するのは困難ですし、増減することもよくあります。 そのため、配列では対応できないことも多く、代わりにArrayListクラスを使うことが多いです。

ArrayListクラスは以下のようにインスタンスを生成します。

ArrayList<クラス名> 変数名 = new ArrayList<クラス名>();

クラス名は入れるデータのクラス名を指定します。そのクラスを入れる配列になります。

// 例:Heroの配列
ArrayList<Hero> list = new ArrayList<Hero>();

ArrayListの利用

ArrayListにデータを追加するにはaddメソッドを使います。0番目から順に追加されていきます。

list.add( new Hero("田中") );
list.add( new Hero("鈴木") );
list.add( new Hero("佐藤") );

要素を取得するには get メソッドを使います。引数には配列での添え字を指定します。

Hero h = list.get(0);

ArrayListの拡張for

ArrayListも配列と同じく、拡張forを使うことが出来ます。

for(Hero h : iist){
    System.out.println( h.name );
}