JavaTM Platform
Standard Ed. 6

java.util
クラス ArrayList<E>

java.lang.Object
  上位を拡張 java.util.AbstractCollection<E>
      上位を拡張 java.util.AbstractList<E>
          上位を拡張 java.util.ArrayList<E>
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
直系の既知のサブクラス:
AttributeList, RoleList, RoleUnresolvedList

public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

List インタフェースのサイズ変更可能な配列の実装です。リストの任意のオペレーションをすべて実装し、null を含むすべての要素を許容します。このクラスは、List インタフェースを実装するほか、リストを格納するために内部的に使われる配列のサイズを操作するメソッドを提供します (このクラスは、同期化されないことを除いて Vector とほぼ同等)。

sizeisEmptygetsetiterator、および listIterator の処理は、一定の時間で実行されます。add の処理も、一定の償却時間で実行されます。 つまり、n 個の要素を追加するには O(n) 時間が必要です。ほとんどの場合、ほかのすべての処理も比例的な時間で実行されます。定数の係数は、LinkedList の実装の場合より小さくなります。

ArrayList のインスタンスには、「サイズ」があります。それは、リストの要素を格納するために使用する配列のサイズで、常にリストのサイズ以上の大きさになります。ArrayList に要素を追加すると、そのサイズは自動的に拡大します。拡大のポリシーについては、要素を追加すると「一定の償却時間コスト」が伴うこと以外は、詳しくは指定されていません。

アプリケーションでは、ensureCapacity を使って ArrayList のインスタンスのサイズを拡大してから、多くの要素を追加できます。これにより、増加に対する再割り当てが軽減される場合があります。

この実装は同期化されません。複数のスレッドが同時に ArrayList のインスタンスにアクセスし、1 つ以上のスレッドが構造的にリストを変更する場合には、リストを外部的に同期化する必要があります。構造的な変更とは、1 つ以上の要素を追加または削除したり、基になる配列のサイズを明示的に変更したりする処理のことです。 要素の値だけを設定する処理は、構造的な変更ではありません。通常、リストの同期をとるには、リストを自然にカプセル化するオブジェクトで同期をとります。 この種のオブジェクトがない場合には、Collections.synchronizedList メソッドを使用してリストを「ラップ」する必要があります。これは、リストへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。

List list = Collections.synchronizedList(new ArrayList(...));

このクラスの iterator および listIterator メソッドによって返される反復子は、「フェイルファスト」です。反復子の作成後に、反復子自体の remove または add メソッド以外の方法でリストが構造的に変更されると、反復子は ConcurrentModificationException をスローします。このように、並行して変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。

通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。「反復子のフェイルファストの動作はバグを検出するためにのみ使用すべきです」

このクラスは、Java Collections Framework のメンバーです。

導入されたバージョン:
1.2
関連項目:
Collection, List, LinkedList, Vector, 直列化された形式

フィールドの概要
 
クラス java.util.AbstractList から継承されたフィールド
modCount
 
コンストラクタの概要
ArrayList()
          初期容量 10 で空のリストを作成します。
ArrayList(Collection<? extends E> c)
          指定されたコレクションの要素が含まれているリストを、要素がコレクションの反復子によって返される順序で作成します。
ArrayList(int initialCapacity)
          指定された初期サイズで空のリストを作成します。
 
メソッドの概要
 boolean add(E e)
          リストの最後に、指定された要素を追加します。
 void add(int index, E element)
          リスト内の指定された位置に指定された要素を挿入します。
 boolean addAll(Collection<? extends E> c)
          指定されたコレクション内のすべての要素を、指定されたコレクションの反復子によって返される順序でリストの最後に追加します。
 boolean addAll(int index, Collection<? extends E> c)
          指定されたコレクション内のすべての要素を、リストの指定された位置に挿入します。
 void clear()
          リストからすべての要素を削除します。
 Object clone()
          ArrayList のインスタンスのシャローコピーを返します。
 boolean contains(Object o)
          リストに指定された要素がある場合に true を返します。
 void ensureCapacity(int minCapacity)
          必要に応じて、この ArrayList のインスタンスのサイズを拡大し、少なくとも最小サイズ引数で指定された数の要素を格納できるようにします。
 E get(int index)
          リスト内の指定された位置にある要素を返します。
 int indexOf(Object o)
          指定された要素がリスト内で最初に検出された位置のインデックスを返します。
 boolean isEmpty()
          リストに要素がない場合に true を返します。
 int lastIndexOf(Object o)
          指定された要素がリスト内で最後に検出された位置のインデックスを返します。
 E remove(int index)
          リストの指定された位置にある要素を削除します。
 boolean remove(Object o)
          存在する場合は、最初に検出された指定要素をこのリストから削除します。
protected  void removeRange(int fromIndex, int toIndex)
          このリストから、fromIndex で始まり、toIndex の直前で終わるインデックスを持つすべての要素を削除します。
 E set(int index, E element)
          リストの指定された位置にある要素を、指定された要素で置き換えます。
 int size()
          リスト内にある要素の数を返します。
 Object[] toArray()
          リスト内のすべての要素を適切な順序 (最初の要素から最後の要素へ) で格納している配列を返します。
<T> T[]
toArray(T[] a)
          リスト内のすべての要素を適切な順序 (最初の要素から最後の要素へ) で格納している配列を返します。
 void trimToSize()
          この ArrayList のインスタンスのサイズをリストの現在のサイズに縮小します。
 
クラス java.util.AbstractList から継承されたメソッド
equals, hashCode, iterator, listIterator, listIterator, subList
 
クラス java.util.AbstractCollection から継承されたメソッド
containsAll, removeAll, retainAll, toString
 
クラス java.lang.Object から継承されたメソッド
finalize, getClass, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.List から継承されたメソッド
containsAll, equals, hashCode, iterator, listIterator, listIterator, removeAll, retainAll, subList
 

コンストラクタの詳細

ArrayList

public ArrayList(int initialCapacity)
指定された初期サイズで空のリストを作成します。

パラメータ:
initialCapacity - リストの初期容量
例外:
IllegalArgumentException - 指定された初期容量が負の場合

ArrayList

public ArrayList()
初期容量 10 で空のリストを作成します。


ArrayList

public ArrayList(Collection<? extends E> c)
指定されたコレクションの要素が含まれているリストを、要素がコレクションの反復子によって返される順序で作成します。

パラメータ:
c - 要素がリストに配置されるコレクション
例外:
NullPointerException - 指定されたコレクションが null である場合
メソッドの詳細

trimToSize

public void trimToSize()
この ArrayList のインスタンスのサイズをリストの現在のサイズに縮小します。アプリケーションでは、このオペレーションで ArrayList のインスタンスの格納サイズを最小にすることができます。


ensureCapacity

public void ensureCapacity(int minCapacity)
必要に応じて、この ArrayList のインスタンスのサイズを拡大し、少なくとも最小サイズ引数で指定された数の要素を格納できるようにします。

パラメータ:
minCapacity - 目的の最小容量

size

public int size()
リスト内にある要素の数を返します。

定義:
インタフェース Collection<E> 内の size
定義:
インタフェース List<E> 内の size
定義:
クラス AbstractCollection<E> 内の size
戻り値:
リスト内の要素数

isEmpty

public boolean isEmpty()
リストに要素がない場合に true を返します。

定義:
インタフェース Collection<E> 内の isEmpty
定義:
インタフェース List<E> 内の isEmpty
オーバーライド:
クラス AbstractCollection<E> 内の isEmpty
戻り値:
リストが要素を 1 つも保持していない場合は true

contains

public boolean contains(Object o)
リストに指定された要素がある場合に true を返します。つまり、リストに、(o==null ? e==null : o.equals(e)) となる要素 e が 1 つ以上含まれている場合にだけ true を返します。

定義:
インタフェース Collection<E> 内の contains
定義:
インタフェース List<E> 内の contains
オーバーライド:
クラス AbstractCollection<E> 内の contains
パラメータ:
o - リストにあるかどうかを調べる要素
戻り値:
リストが、指定された要素を保持している場合は true

indexOf

public int indexOf(Object o)
指定された要素がリスト内で最初に検出された位置のインデックスを返します。 指定された要素がこのリストにない場合は -1 を返します。つまり、(o==null ? get(i)==null : o.equals(get(i))) を満たす最小のインデックス値 i を返します。このようなインデックスがない場合は、-1 を返します。

定義:
インタフェース List<E> 内の indexOf
オーバーライド:
クラス AbstractList<E> 内の indexOf
パラメータ:
o - 検索する要素
戻り値:
指定された要素がリスト内で最初に検出された位置のインデックス。その要素がリストにない場合は -1

lastIndexOf

public int lastIndexOf(Object o)
指定された要素がリスト内で最後に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1 を返します。つまり、(o==null ? get(i)==null : o.equals(get(i))) を満たす最大のインデックス値 i を返します。このようなインデックスがない場合は、-1 を返します。

定義:
インタフェース List<E> 内の lastIndexOf
オーバーライド:
クラス AbstractList<E> 内の lastIndexOf
パラメータ:
o - 検索する要素
戻り値:
指定された要素がリスト内で最後に検出された位置のインデックス。その要素がリストにない場合は -1

clone

public Object clone()
ArrayList のインスタンスのシャローコピーを返します。要素自体はコピーされません。

オーバーライド:
クラス Object 内の clone
戻り値:
この ArrayList のインスタンスの複製
関連項目:
Cloneable

toArray

public Object[] toArray()
リスト内のすべての要素を適切な順序 (最初の要素から最後の要素へ) で格納している配列を返します。

返される配列への参照をリストが維持しないという点で、この配列は安全です。つまり、このメソッドは新しい配列を割り当てる必要があります。このため、呼び出し側は、返された配列を自由に変更できます。

メソッドは、配列ベースの API とコレクションベースの API の間の橋渡し役として機能します。

定義:
インタフェース Collection<E> 内の toArray
定義:
インタフェース List<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
戻り値:
リスト内のすべての要素を適切な順序で格納している配列
関連項目:
Arrays.asList(Object[])

toArray

public <T> T[] toArray(T[] a)
リスト内のすべての要素を適切な順序 (最初の要素から最後の要素へ) で格納している配列を返します。返される配列の実行時の型は、指定された配列の型になります。指定された配列にリストが収まる場合は、その配列に返されます。それ以外の場合は、指定された配列の実行時の型とリストのサイズを使って新しい配列が割り当てられます。

指定された配列にリストが収まり、その配列にさらに余分な領域がある場合、つまり配列にリストより多くの要素がある場合、配列でコレクションの末尾に続く要素は null に設定されます。これは、呼び出し側がリストに null 要素が含まれていないことがわかっている場合には、リストの長さを判定するのに利用できます。

定義:
インタフェース Collection<E> 内の toArray
定義:
インタフェース List<E> 内の toArray
オーバーライド:
クラス AbstractCollection<E> 内の toArray
パラメータ:
a - 配列が十分な大きさを持つ場合は、リストの要素が格納される配列。そうでない場合は、要素を格納するために同じ実行時の型の新しい配列が割り当てられる
戻り値:
リストの要素が格納されている配列
例外:
ArrayStoreException - 指定された配列の実行時の型が、このリスト内のすべての要素の実行時の型のスーパータイプでない場合
NullPointerException - 指定された配列が null である場合

get

public E get(int index)
リスト内の指定された位置にある要素を返します。

定義:
インタフェース List<E> 内の get
定義:
クラス AbstractList<E> 内の get
パラメータ:
index - 返される要素のインデックス
戻り値:
リスト内の指定された位置にある要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

set

public E set(int index,
             E element)
リストの指定された位置にある要素を、指定された要素で置き換えます。

定義:
インタフェース List<E> 内の set
オーバーライド:
クラス AbstractList<E> 内の set
パラメータ:
index - 置換される要素のインデックス
element - 指定された位置に格納される要素
戻り値:
指定された位置に以前あった要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

add

public boolean add(E e)
リストの最後に、指定された要素を追加します。

定義:
インタフェース Collection<E> 内の add
定義:
インタフェース List<E> 内の add
オーバーライド:
クラス AbstractList<E> 内の add
パラメータ:
e - リストに追加される要素
戻り値:
true (Collection.add(E) で指定された場合と同様)

add

public void add(int index,
                E element)
リスト内の指定された位置に指定された要素を挿入します。その位置とそれ以降に要素があればそれらを右に移動させ、各要素のインデックスに 1 を加えます。

定義:
インタフェース List<E> 内の add
オーバーライド:
クラス AbstractList<E> 内の add
パラメータ:
index - 指定の要素が挿入される位置のインデックス
element - 挿入される要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

remove

public E remove(int index)
リストの指定された位置にある要素を削除します。後続の要素は左に移動します (インデックス値から 1 を減算)。

定義:
インタフェース List<E> 内の remove
オーバーライド:
クラス AbstractList<E> 内の remove
パラメータ:
index - 削除される要素のインデックス
戻り値:
リストから削除した要素
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

remove

public boolean remove(Object o)
存在する場合は、最初に検出された指定要素をこのリストから削除します。その要素がリストにない場合、変更はありません。つまり、(o==null ? get(i)==null : o.equals(get(i))) となる、最小のインデックス値 i を持つ要素が存在する場合は、その要素を削除します。指定された要素がこのリストに含まれていた場合、つまり、呼び出しの結果としてこのリストが変更された場合に true を返します。

定義:
インタフェース Collection<E> 内の remove
定義:
インタフェース List<E> 内の remove
オーバーライド:
クラス AbstractCollection<E> 内の remove
パラメータ:
o - リストから削除される要素 (その要素が存在する場合)
戻り値:
リストが、指定された要素を保持している場合は true

clear

public void clear()
リストからすべての要素を削除します。この呼び出しが戻ると、このリストは空になります。

定義:
インタフェース Collection<E> 内の clear
定義:
インタフェース List<E> 内の clear
オーバーライド:
クラス AbstractList<E> 内の clear

addAll

public boolean addAll(Collection<? extends E> c)
指定されたコレクション内のすべての要素を、指定されたコレクションの反復子によって返される順序でリストの最後に追加します。オペレーションの進行中に、指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。つまり、指定されたコレクションがこのリスト自身であり、リストが空でない場合、この呼び出しの動作は保証されません。

定義:
インタフェース Collection<E> 内の addAll
定義:
インタフェース List<E> 内の addAll
オーバーライド:
クラス AbstractCollection<E> 内の addAll
パラメータ:
c - リストに追加される要素を含むコレクション
戻り値:
この呼び出しの結果、このリストが変更された場合は true
例外:
NullPointerException - 指定されたコレクションが null である場合
関連項目:
AbstractCollection.add(Object)

addAll

public boolean addAll(int index,
                      Collection<? extends E> c)
指定されたコレクション内のすべての要素を、リストの指定された位置に挿入します。その位置とそれ以降に要素がある場合は、それらを右に移動して、各要素のインデックスに 1 を加えます。新しい要素は、指定されたコレクションの反復子によって返される順番でリストに挿入されます。

定義:
インタフェース List<E> 内の addAll
オーバーライド:
クラス AbstractList<E> 内の addAll
パラメータ:
index - 指定されたコレクションから最初の要素を挿入する位置のインデックス
c - リストに追加される要素を含むコレクション
戻り値:
この呼び出しの結果、このリストが変更された場合は true
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())
NullPointerException - 指定されたコレクションが null である場合

removeRange

protected void removeRange(int fromIndex,
                           int toIndex)
このリストから、fromIndex で始まり、toIndex の直前で終わるインデックスを持つすべての要素を削除します。後続の要素は左に移動します (インデックス値が減少)。この呼び出しは、(toIndex - fromIndex) の要素数だけリストを短縮します。toIndex==fromIndex の場合、この処理は実行されません。

オーバーライド:
クラス AbstractList<E> 内の removeRange
パラメータ:
fromIndex - 削除する最初の要素のインデックス
toIndex - 削除する最後の要素の直後のインデックス
例外:
IndexOutOfBoundsException - fromIndex または toIndex が範囲外の場合 (fromIndex < 0 || fromIndex >= size() || toIndex > size() || toIndex < fromIndex)

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。