ArrayListは、自動的に配列大きさが増加する
任意オブジェクトの配列を管理するクラスです。
(このような配列は可変長配列と呼ばれます)
通常の配列は最初に要素数を決めてその要素数は変化しません。
対してArrayListの内部配列は、addメソッドを使うことで
自動的に増えていきます。
この配列要素に添え字を指定してオブジェクトを設定する時は、
setメソッドを使います。
また、添え字を指定してこの配列要素を取得する場合は、
getメソッドを使います。
そして、内部配列で管理される要素数は、lengthでなく、代わりに
sizeメソッドで取得します。
次の例では、空の可変長配列オブジェクトを変数 lst で管理させ、
そこにRecord2のオブジェクト3つ追加(add)します。
それぞれのオブジェクトは、
追加の順番で内部的に0,1,2の添え字で管理されます。
その後、1の添え字要素をRecord3のオブジェクトに設定(set)し直し、
各要素を順番に取得(get)して表示します。
この表示は、0番目から要素数(size)未満の繰り返しで、
全て表示するプログラムです。
import java.util.ArrayList;
import rec.Record2;
import rec.Record3;
public class Test
{
	public static void main(String[] arg) throws Exception
	{
		ArrayList<Record2> lst = new ArrayList<Record2>();
		lst.add(new Record2("A01", 10));//追加により、自動的に内部サイズが増えます。
		lst.add(new Record2("A02", 20));
		lst.add(new Record2("C03", 30));
		lst.set(1, new Record3("B02", 20, 200)); //1の添え字要素を、生成したRecord3へ変更
		
		for(int i=0; i < lst.size(); i++){
			Record2 rec = lst.get(i);	//i番目要素
			rec.display(i);
		}
	}
}
  の2行は、
lst.get(i).display(i);の
一行にまとめることができます。
以下に、この実行を示します。
Z:\java>java Test
   0番目レコード
        商品コード:A01
        数量:10
   1番目レコード
        商品コード:B02
        数量:20
        単価:200
   2番目レコード
        商品コード:C03
        数量:30
Z:\java>
なお、上記の,<Record2>の部分が、
Genericsの部分に指定した利用する時の型指定です。
このような可変長配列のコードはどのようになっているのでしょうか? 
実際のコードは、JDKのインストールディレクトリの中のsrc.zip内の
java.utilパッケージにあり、実際のコードを見るのが良いでしょう。
上記を実行できる限定版のArrayListであれば次のように作れます。
(実際のjava.util.ArrayListコードはもっと複雑ですが、Genericsの例として参考に示します)
public class ArrayList <T>{
	private int upSize=3;
	T [] data= (T [])new Object[upSize];
	int size=0;
	public boolean add(T obj){
		if(size >= data.length){//記憶できるようにサイズ拡大
			T [] temp = (T [])new Object[data.length + upSize];
			System.arraycopy(data, 0, temp, 0, data.length);//tempにdata全要素をコピー
			data = temp; // 増やした新しい配列に置き換える。
		}
		data[size++] = obj;
		return true;
	}
	public int size(){//サイズ取得
		return this.size;
	}
	public T get(int index){//要素取得
		return data[index];
	} 
	public T set(int index , T obj){//要素変更
		T rtnObj = data[index];
		data[index] = obj;
		return rtnObj;
	}
}
| 
 
これを使って、メニュー操作で追加と変更ができる簡単な作品を紹介します。  | 
Z:\java>java Test
a:追加、c:変更、e:終了>a
追加データ:  商品コード>>A01
  数量>>10
   0番目レコード
        商品コード:A01
        数量:10
a:追加、c:変更、e:終了>a
追加データ:  商品コード>>bbb
  数量>>0
   0番目レコード
        商品コード:A01
        数量:10
   1番目レコード
        商品コード:bbb
        数量:0
a:追加、c:変更、e:終了>a
追加データ:  商品コード>>C03
  数量>>30
   0番目レコード
        商品コード:A01
        数量:10
   1番目レコード
        商品コード:bbb
        数量:0
   2番目レコード
        商品コード:C03
        数量:30
a:追加、c:変更、e:終了>c
変更する添え字>1
変更データ:  商品コード>>C02
  数量>>20
   0番目レコード
        商品コード:A01
        数量:10
   1番目レコード
        商品コード:C02
        数量:20
   2番目レコード
        商品コード:C03
        数量:30
a:追加、c:変更、e:終了>e
Z:\java>
 | 
←正しく修正してからクリックください。
  	
	 
  	←わからない場合は、クリック 
	
 
Z:\java>java Test a:追加、c:変更、e:終了>a 追加データ:AAA AAA a:追加、c:変更、e:終了>a 追加データ:b AAA b a:追加、c:変更、e:終了>a 追加データ:CC CCC AAA b CC CCC a:追加、c:変更、e:終了>c 変更する添え字>1 変更データ:BB AAA BB CC CCC a:追加、c:変更、e:終了>e Z:\java>