java.util.ArrayList

ArrayListクラスはJavaで配列を扱う為のクラスです。
配列には任意のオブジェクトを含める事が可能で、ランダムアクセスや順次アクセスなどの様々な機能を提供します。
ArrayListクラスの最も便利な点の1つは、配列のサイズが自動的に拡張されていく為、作成時にサイズが解らなくとも使用できる事です。

ArrayListの主なコンストラクタは2つです。

コンストラク 概要
ArrayList() 初期容量 10 で空のリストを作成します。
ArrayList(int initialCapacity) 指定された初期サイズで空のリストを作成します。

通常はデフォルトのコンストラクタを使いますが、配列のサイズがある程度は解っている場合、初期サイズを指定してインスタンスを生成するとパフォーマンスが向上します(後述)。

ArrayListクラスの主要なメソッドを以下に示します。

戻り値 メソッド 概要
boolean add(Object o) リストの最後に、指定された要素を追加します。
void add(int index, Object element) リストの指定された位置に、指定された要素を挿入します。
int size() リスト内にある要素の数を返します。
boolean isEmpty() リストに要素がないかどうかを判定します。
Object get(int index) リスト内の指定された位置にある要素を返します。
Object remove(int index) リスト内の指定された位置から要素を削除します。
void clear() リストからすべての要素を削除します。
boolean contains(Object elem) リストに指定の要素がある場合に true を返します。
Iterator iterator() このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。

iterator()メソッドはArrayListスーパークラスであるAbstractListのメソッド
これらは全てjava.util.Listインターフェイスに定義されており、ArrayListはListインターフェイスを実装しています。

要素の追加

ArrayListに追加できる要素はObjectクラスとなっています。
Objectクラスは全てのクラスのスーパークラス(基底クラス)ですから、どんなクラスのインスタンス(オブジェクト)もArrayListの要素となりえる事になります。
しかし、プリミティブ型のintやlongなどはそのままでは要素になれない為、プリミティブ型ラッパークラスと呼ばれるクラスのインスタンスに変換する必要があります(ここでは割愛)。

add()メソッドを使えばリストの最後に要素を追加できますが、リストの指定された位置に挿入することもできます。

    ArrayList list = new ArrayList();
    list.add("Hello");
    list.add("World");
    list.add(new Date());

このようにArrayListには異なるクラスのインスタンス(オブジェクト)を詰めることもできます。
尚、add(int index, Object element)で不正なindexを指定した場合には例外が発生します。
例外に関しては次の章で学ぶので、現在は「エラーとなる」とだけ抑えておきましょう。

素数の取得

size()メソッドを使うことにより現在のリストの要素数を取得できます。
インスタンスを生成した時点での要素数は当然ながら0です(初期容量は10でも要素数は0)。
isEmpty()メソッドは要素数が0の場合にtureを返すメソッドですが、これはif文と組み合わせてよく使われます。

    if(list.isEmpty() == true) {
        // 処理
    }

と書く事と次のように書く事は本質的に同じです。

    if( 0 < list.size() ) {
        // 処理
    }

要素の取得

ArrayListインスタンスから追加したインスタンスを取得するにはget(int index)メソッドを使用します。
引数には0から始まる要素のインデックスを指定します。
このメソッドの戻り値はObject型である為、元の型として使いたい場合はキャストする必要があります。

    ArrayList list = new ArrayList();
    list.add("Hello");
    list.add("World");
    
    Object hello = list.get(0);
    // String型として使いたい場合はキャストする
    String world = (String) list.get(1);

ただし、要素のサイズを超えてget()メソッドを使用すると、例外が発生します(エラーとなる)。

要素のループ処理

get()メソッドとsize()メソッドを使用すると、ArrayListの中に含まれる要素を順次処理できます。

    ArrayList list = new ArrayList();
    list.add("Hello");
    list.add("World");
    
    for(int i = 0; i < list.size(); i++)
    {
        Object obj = list.get(i);
        String str = (String) obj;
        // 処理
    }

size()では要素数が取得できる為、要素数未満という条件式の元でカウンター(i)をループさせれば、ArrayListに登録した順番で処理することができます。