appendix> util> Collection> ArrayList TOPUPPREVNEXT

java.util.ArrayList<E>

【概要】

リストを実装しています。 可変長の配列です。 容量が不足すると大きな容量を確保しなおし、複写します。 要素に null を含むことができます。
Vector クラスと同等の機能を提供しますが、 ArrayList は同期化されません。
複数のスレッドから要素を追加・削除する可能性のある場合は
List list = Collections.synchronizedList(new ArrayList( ... ));
のように、synchronizedList メソッドでラップします。
各要素のアクセス時間が一定です(言い替えると、総アクセス時間がアクセスする要素数に比例します)。 このことを 「 RandomAccess インターフェースを実装している 」 といいます。

【継承関係】

  java.lang.Object
     └java.util.AbstractCollection<E>
          └java.util.AbstractList<E>
               └java.util.ArrayList<E>

【コンストラクタ】

コンストラクタ機能
ArrayList ( ) 初期容量が 10 の空のリストを作成します。
ArrayList(Collection<? extends E> c) コレクション c を順序どおりに含むリストを作成します。
Collection<? extends E> はこの ArrayList の要素のクラス またはその子クラスに値を限定されたコレクションを指定できることを示しています。
初期容量は、 csize() の10%増しが確保されます。
ArrayList( int capa ) 初期容量が capa のリストを作成します。

【メソッド】

メソッド機能
boolean add ( E e ) このリストの最後に要素 e を追加します。 値は true です。
void add ( int ind, E e ) リストの ind 番目の要素として e を挿入し、それ以降を1つ後ろにずらします。
0 <= ind <= size() でない場合、 IndexOutOfBoundsException がスローされます。
boolean addAll (
int ind,
Collection<? extends E> c)
このリストの ind 番目の直前に c の全要素を挿入します。 c の順序は保存されます。 リストが変更された場合 true が返されます。
0 <= ind <= size() でない場合、 IndexOutOfBoundsException がスローされます。
c が null であると NullPointerException がスローされます。
boolean addAll (
Collection<? extends E> c)
c の全要素を(イテレータで獲得する順に) このリストの最後に追加します。 値は true です。
c が null であると NullPointerException がスローされます。
void clear ( ) このリストからすべての要素を削除します。リストは空になります。
Object clone ( ) この ArrayList のコピーを返します。要素自体のコピーは作成しません。
boolean contains ( Object e ) このリストに要素 e が含まれている場合に true。
void ensureCapacity ( int capa ) capa 個の要素を格納できるように容量を拡大する。
E get ( int ind ) このリストの ind 番目の要素。
0 <= ind < size() でない場合、 IndexOutOfBoundsException がスローされます。
int indexOf ( Object o ) o がこのリストの何番目にあるかを返します。 複数ある場合は若い番号のものが返されます。 見つからない場合は -1 が返されます。
boolean isEmpty ( ) このリストに要素が1つもない場合 true。
int lastIndexOf ( Object o ) o がこのリストの何番目にあるかを返します。 複数ある場合は番号の最も大きいものが返されます。 見つからない場合は -1 が返されます。
E remove ( int ind ) このリストの ind 番目の要素を削除し、 それ以降を前につめます。 削除した要素が値として返されます。
0 <= ind < size() でない場合、 IndexOutOfBoundsException がスローされます。
boolean remove ( Object e ) このリストに e が含まれていれば1つ削除します。
削除した場合 true 、 含まれていなかった場合 false 。
E set ( int ind, E e ) このリストの ind 番目を e に置き換え、もとの値を返します。
0 <= ind < size() でない場合、 IndexOutOfBoundsException がスローされます。
int size ( ) このリストの要素数。
Object [ ] toArray ( ) このリスト内の全要素をおなじ順序に格納した配列を返します。
<T> T [ ] toArray ( T [ ] a ) このリスト内の全要素をおなじ順序に格納した配列を返します。
先頭の<T>は、T が型パラメータであるという宣言です。 ここでは、2ヵ所の T に同一のクラスを指定すればよく、クラス自体は任意に選べることを示しています。
a に収まる場合は a につめ、 残りの部分には null をつめて a を返します。 結果が a に収まりきらない場合は、 このリストの size() の配列があらたに作成されます。
実行時に型検査がされ、要素が a のクラスか子クラスでない場合 ArrayStoreException がスローされます。
void trimToSize ( ) このリストの容量を、このリストの size() にぴったりになるよう縮小します。

【AbstractList から継承したメソッド】

メソッド機能
boolean equals ( Object o ) このリストと o が等しい場合に true。
int hashCode ( ) このリストのハッシュコード。
Iterator<E> iterator ( ) このリストのイテレータ。
ListIterator<E> listIterator ( ) このリストのイテレータを返します。
ListIterator<E> listIterator ( int ind ) このリストの ind から始まるイテレータを返します。
List<E> subList (
int start , int end )
このリストの start(これを含む)から end(これを含まない)までの部分。 新しいリストが作られるのではなく、 もとのリストのこの部分を参照するビューが返されます。 この部分についてコレクションやリストでサポートしている全てのメソッドが使えます。

【AbstractCollection から継承したメソッド】

メソッド機能
boolean containsAll (
Collection<?> c)
c の全要素がこのコレクションに含まれる場合 true。
boolean removeAll (
Collection<?> c)
このリストから c の要素をを削除します。
ひとつでも削除できれば true 。
boolean retainAll (
Collection<?> c)
このリストのうち、c に含まれるものだけを残します。
リストが変更された場合 ture 。
String toString ( ) このリストの各要素を ToString() で文字列に変換し、 このリストの順序にコンマで区切ってならべ、"[" "]" で括ったもの。

【例1】

コンストラクタと、 add メソッド の例

プログラム ArrayListDemo1.java

実行結果

ArrayListDemo1-1.gif
要素を String に限定した ArrayList listA の生成(32行目)、 初期容量を 50 で生成(33行目)。 生成した ArrayList をインターフェース List に代入した例(34行目)

add で要素を追加し(36〜39行目)、表示(40行目)。

2番目の要素として3回追加し、表示(42〜45行目)。

47行目から55行目は、2つ目コンストラクタ(Collection<? extends E>)の例です。

MyString の子クラス SonString の ArrayList listBX を作成しておき(47〜49行目)、 子クラスのコレクションをパラメータにして MyString の ArrayList を生成しています(50行目)。 51行目で listB を表示してみるとと、 実行時の要素としては SonString が設定されていることが判ります。 54行目のように、要素を取り出しても中身は SunString ですが、 55行目のコメントをはずしてコンパイルすると listB.get(0) はそのままでは SunString としてアクセスできないことが判ります。 コンパイル時の型検査では、50行目の型の制限どおり MyString としてチェックされています。 56行目のように SunString にキャストすれば正常にコンパイルされ、 表示も53行目と同じ ZZZ となります(56行目のコメントをはずした場合)。

58〜65行目は、add メソッドで子クラスの要素を追加している例です。 パラメータの受渡し時に拡大変換がされ、SonString から MyString になるケースです。 実行時のクラスとしては、子クラスのまま取り扱われていることが判ります(64〜65行目)が、 キャストせずにアクセスするとコンパイル時にはじかれます(66行目のコメントをはずした場合)。

【例2】

addAll、 get、 indexOf、 lastIndexOf、 remove の例

プログラム ArrayListDemo2.java

実行結果

ArrayListDemo2-1.gif

Top Page
更新日:2005-07-27