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 );
}