JavaTM Platform
Standard Ed. 6

java.util
クラス AbstractList<E>

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

public abstract class AbstractList<E>
extends AbstractCollection<E>
implements List<E>

このクラスは、List インタフェースのスケルトン実装を提供し、配列のような「ランダムアクセス」データ記憶域に連動するこのインタフェースを実装するのに必要な作業量を最小限に抑えます。リンクリストのような順次アクセスデータ記憶域の場合は、このクラスではなく AbstractSequentialList を使用してください。

変更不可能なリストを実装するには、このクラスを拡張して、get(int) メソッドおよび size() メソッドの実装を提供します。

変更可能なリストを実装するには、上記に加えて、set(int, E) メソッドをオーバーライドします。このメソッドをオーバーライドしなかった場合は、UnsupportedOperationException がスローされます。リストが可変サイズである場合は、add(int, E) メソッドおよび remove(int) メソッドもオーバーライドする必要があります。

Collection インタフェースの仕様で推奨されているように、通常は、引数なしの void コンストラクタ、および引数にコレクションをとるコンストラクタを提供してください。

ほかのコレクションの抽象実装とは異なり、反復子の実装を提供する必要はありません。反復子およびリスト反復子はこのクラスで実装され、ランダムアクセス用のメソッドである get(int)set(int, E)add(int, E)、および remove(int) の上位に位置付けられます。

実装の詳細については、このクラスの abstract メソッド以外の各メソッドのドキュメントを参照してください。より効率的な実装ができるコレクションの場合は、これらのメソッドをオーバーライドしてもかまいません。

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

導入されたバージョン:
1.2

フィールドの概要
protected  int modCount
          このリストの「構造が変更された」回数です。
 
コンストラクタの概要
protected AbstractList()
          唯一のコンストラクタです。
 
メソッドの概要
 boolean add(E e)
          指定された要素をリストの最後に追加します (任意のオペレーション)。
 void add(int index, E element)
          リスト内の指定された位置に、指定された要素を挿入します (任意のオペレーション)。
 boolean addAll(int index, Collection<? extends E> c)
          指定されたコレクション内のすべての要素を、リストの指定された位置に挿入します (任意のオペレーション)。
 void clear()
          すべての要素をリストから削除します (任意のオペレーション)。
 boolean equals(Object o)
          指定されたオブジェクトがリストと等しいかどうかを比較します。
abstract  E get(int index)
          リスト内の指定された位置にある要素を返します。
 int hashCode()
          このリストのハッシュコード値を返します。
 int indexOf(Object o)
          指定された要素がリスト内で最初に検出された位置のインデックスを返します。
 Iterator<E> iterator()
          このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。
 int lastIndexOf(Object o)
          指定された要素がリスト内で最後に検出された位置のインデックスを返します。
 ListIterator<E> listIterator()
          このリスト内の要素を適切な順序で繰り返し処理するリスト反復子を返します。
 ListIterator<E> listIterator(int index)
          リスト内の要素を適切な順序で繰り返し処理する、リスト内の指定された位置から開始する反復子を返します。
 E remove(int index)
          リスト内の指定された位置にある要素を削除します (任意のオペレーション)。
protected  void removeRange(int fromIndex, int toIndex)
          fromIndex (これを含む) 〜 toIndex (これを含まない) の範囲のインデックスを持つすべての要素をこのリストから削除します。
 E set(int index, E element)
          リスト内の指定された位置にある要素を、指定された要素に置き換えます (任意のオペレーション)。
 List<E> subList(int fromIndex, int toIndex)
          このリストの、fromIndex (これを含む) から toIndex (これを含まない) の範囲の部分のビューを返します。
 
クラス java.util.AbstractCollection から継承されたメソッド
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toString
 
クラス java.lang.Object から継承されたメソッド
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.List から継承されたメソッド
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray
 

フィールドの詳細

modCount

protected transient int modCount
このリストの「構造が変更された」回数です。構造の変更とは、リストのサイズの変更や、その他の進行中の繰り返し処理が不正な結果をもたらすような変更のことです。

このフィールドは、iterator メソッドおよび listIterator メソッドによって返される反復子およびリスト反復子の実装によって使用されます。このフィールドの値が予期しない形で変化した場合、反復子やリスト反復子は nextremovepreviousset、または add オペレーションに応じて ConcurrentModificationException をスローします。これは、繰り返し処理中の並行変更を前にして、未確定動作ではなくフェイルファスト動作を提供します。

このフィールドをサブクラスで使用するのは任意です。サブクラスでフェイルファスト反復子およびリスト反復子を提供する必要がある場合には、単純に、サブクラスの add(int, E) メソッドおよび remove(int) メソッド (および、サブクラスがオーバーライドするメソッドのうちで、リストの構造的な変更をするメソッド) の内部で、このフィールドをインクリメントします。@code add(int, E)} または remove(int) に対する 1 回の呼び出しでは、フィールドに 1 だけ加える必要があります。そうしないと、反復子 (およびリスト反復子) が誤って ConcurrentModificationExceptions をスローすることになります。実装でフェイルファスト反復子を提供しない場合は、このフィールドを無視してもかまいません。

コンストラクタの詳細

AbstractList

protected AbstractList()
唯一のコンストラクタです。サブクラスのコンストラクタによる呼び出し用で、通常は暗黙的に呼び出されます。

メソッドの詳細

add

public boolean add(E e)
指定された要素をリストの最後に追加します (任意のオペレーション)。

このオペレーションをサポートするリストは、リストに追加できる要素に制限を加える場合があります。特に、リストには null 要素の追加を拒否するものもあれば、追加される要素の型について制限を加えるものもあります。List クラスは、List に追加できる要素について制約があれば、ドキュメントでそれを明確に指定する必要があります。

この実装は add(size(), e) を呼び出します。

この実装は、add(int, E) がオーバーライドされないかぎり UnsupportedOperationException をスローします。

定義:
インタフェース Collection<E> 内の add
定義:
インタフェース List<E> 内の add
オーバーライド:
クラス AbstractCollection<E> 内の add
パラメータ:
e - リストに追加される要素
戻り値:
true (Collection.add(E) で指定された場合と同様)
例外:
UnsupportedOperationException - リストが add オペレーションをサポートしていない場合
ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合
NullPointerException - 指定された要素が null で、このリストが null 要素を許容しない場合
IllegalArgumentException - この要素のある特性が原因で、このリストに要素を追加できない場合

get

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

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

set

public E set(int index,
             E element)
リスト内の指定された位置にある要素を、指定された要素に置き換えます (任意のオペレーション)。

この実装は、常に UnsupportedOperationException をスローします。

定義:
インタフェース List<E> 内の set
パラメータ:
index - 置換される要素のインデックス
element - 指定された位置に格納される要素
戻り値:
指定された位置に以前あった要素
例外:
UnsupportedOperationException - set オペレーションがこのリストでサポートされない場合
ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合
NullPointerException - 指定された要素が null で、このリストが null 要素を許容しない場合
IllegalArgumentException - 指定された要素のあるプロパティーが原因で、このリストにその要素を追加できない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

add

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

この実装は、常に UnsupportedOperationException をスローします。

定義:
インタフェース List<E> 内の add
パラメータ:
index - 指定の要素が挿入される位置のインデックス
element - 挿入される要素
例外:
UnsupportedOperationException - add オペレーションがこのリストでサポートされない場合
ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合
NullPointerException - 指定された要素が null で、このリストが null 要素を許容しない場合
IllegalArgumentException - 指定された要素のあるプロパティーが原因で、このリストにその要素を追加できない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

remove

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

この実装は、常に UnsupportedOperationException をスローします。

定義:
インタフェース List<E> 内の remove
パラメータ:
index - 削除される要素のインデックス
戻り値:
指定された位置に以前あった要素
例外:
UnsupportedOperationException - remove オペレーションがこのリストでサポートされない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

indexOf

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

この実装は、listIterator() を使って、最初にリスト反復子を取得します。次に、指定された要素が見つかるか、あるいはリストの末尾に達するまで、リストの内容を次々に調べます。

定義:
インタフェース List<E> 内の indexOf
パラメータ:
o - 検索する要素
戻り値:
指定された要素がリスト内で最初に検出された位置のインデックス。その要素がリストにない場合は -1
例外:
ClassCastException - 指定された要素の型が、このリストと互換でない場合 (省略可能)
NullPointerException - 指定された要素が null であり、このリストが null 要素を許可しない場合 (省略可能)

lastIndexOf

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

この実装は、listIterator(size()) を使って、最初にリストの末尾を指すリスト反復子を取得します。次に、指定された要素が見つかるか、あるいはリストの先頭に達するまで、リスト内容を逆方向に次々調べます。

定義:
インタフェース List<E> 内の lastIndexOf
パラメータ:
o - 検索する要素
戻り値:
指定された要素がリスト内で最後に検出された位置のインデックス。その要素がリストにない場合は -1
例外:
ClassCastException - 指定された要素の型が、このリストと互換でない場合 (省略可能)
NullPointerException - 指定された要素が null であり、このリストが null 要素を許可しない場合 (省略可能)

clear

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

この実装は removeRange(0, size()) を呼び出します。

remove(int index) または removeRange(int fromIndex, int toIndex) がオーバーライドされないかぎり、この実装は UnsupportedOperationException をスローします。

定義:
インタフェース Collection<E> 内の clear
定義:
インタフェース List<E> 内の clear
オーバーライド:
クラス AbstractCollection<E> 内の clear
例外:
UnsupportedOperationException - リストが clear オペレーションをサポートしていない場合

addAll

public boolean addAll(int index,
                      Collection<? extends E> c)
指定されたコレクション内のすべての要素を、リストの指定された位置に挿入します (任意のオペレーション)。その位置とそれ以降に要素がある場合は、それらを右に移動して、各要素のインデックスに 1 を加えます。新しい要素は、指定されたコレクションの反復子によって返される順序でリストに挿入されます。オペレーションの進行中に、指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。つまり、指定されたコレクションがこのリストで、しかも空ではない場合に起こります。

この実装は、指定されたコレクションの反復子を取得し、反復子から取得した要素をこのリストの適切な位置に 1 つずつ挿入する操作を繰り返します。挿入には add(int, E) メソッドを使用します。多くの場合、実装では、このメソッドをオーバーライドしたほうが効率的です。

この実装は、add(int, E) がオーバーライドされないかぎり UnsupportedOperationException をスローします。

定義:
インタフェース List<E> 内の addAll
パラメータ:
index - 指定されたコレクションの最初の要素を挿入する位置のインデックス
c - 要素がリストに追加されるコレクション
戻り値:
この呼び出しの結果、このリストが変更された場合は true
例外:
UnsupportedOperationException - addAll オペレーションがこのリストでサポートされない場合
ClassCastException - 指定されたコレクションのある要素のクラスが原因で、このリストにそのコレクションを追加できない場合
NullPointerException - 指定されたコレクションに 1 つ以上の null 要素が含まれており、このリストが null 要素を許可しない場合、または指定されたコレクションが null の場合
IllegalArgumentException - 指定されたコレクションのある要素のある特性が原因で、このリストにそのコレクションを追加できない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

iterator

public Iterator<E> iterator()
このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。

この実装は、反復子インタフェースの簡単な実装を返します。この処理では、基になるリストの size()get(int)、および remove(int) といった各メソッドを利用します。

このメソッドで返される反復子は、リストの remove(int) メソッドがオーバーライドされないかぎり、remove メソッドを呼び出すと UnsupportedOperationException をスローします。

この実装は、(protected) modCount フィールドの仕様で説明されているように、並行変更を前にして実行時の例外をスローすることもあります。

定義:
インタフェース Iterable<E> 内の iterator
定義:
インタフェース Collection<E> 内の iterator
定義:
インタフェース List<E> 内の iterator
定義:
クラス AbstractCollection<E> 内の iterator
戻り値:
リスト内の要素を適切な順序で繰り返し処理する反復子
関連項目:
modCount

listIterator

public ListIterator<E> listIterator()
このリスト内の要素を適切な順序で繰り返し処理するリスト反復子を返します。

この実装は listIterator(0) を返します。

定義:
インタフェース List<E> 内の listIterator
戻り値:
リスト内の要素を適切な順序で繰り返し処理するリスト反復子
関連項目:
listIterator(int)

listIterator

public ListIterator<E> listIterator(int index)
リスト内の要素を適切な順序で繰り返し処理する、リスト内の指定された位置から開始する反復子を返します。指定されたインデックスは、next の最初の呼び出しによって返される最初の要素を示します。previous の最初の呼び出しは、指定されたインデックスから 1 を引いた値のインデックスを持つ要素を返します。

この実装は、ListIterator インタフェースの簡単な実装を返します。ListIterator インタフェースは、iterator() メソッドによって返される Iterator インタフェースの実装を拡張するものです。ListIterator の実装は、基になるリストの get(int)set(int, E)add(int, E)、および remove(int) の各メソッドに依存します。

この実装で返されるリスト反復子は、リストの remove(int)set(int, E)、および add(int, E) メソッドがオーバーライドされないかぎり、removeset、および add メソッドに応答して UnsupportedOperationException をスローします。

この実装は、(protected) modCount フィールドの仕様で説明されているように、並行変更を前にして実行時の例外をスローすることもあります。

定義:
インタフェース List<E> 内の listIterator
パラメータ:
index - リスト反復子から (next メソッド呼び出しによって) 返される最初の要素のインデックス
戻り値:
リスト内の要素を適切な順序で繰り返し処理する、リスト内の指定された位置から開始するリスト反復子
例外:
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())
関連項目:
modCount

subList

public List<E> subList(int fromIndex,
                       int toIndex)
このリストの、fromIndex (これを含む) から toIndex (これを含まない) の範囲の部分のビューを返します。fromIndextoIndex が等しい場合は、空のリストが返されます。 返されるリストはこのリストに連動しています。そのため、返されるリスト内での非構造的な変更はこのリストに反映され、このリスト内での変更は返されるリストに反映されます。返されるリストは、このリストによってサポートされている、リストに関連するオプションのオペレーションをすべてサポートします。

このメソッドは、配列に一般的に見られるような、明示的な範囲操作のための要求を不要にします。リストを要求するいかなる操作もリスト全体ではなく、subList ビュー上で操作することで、範囲操作として使用できます。たとえば、次の慣用法は、指定された範囲の要素をリストから削除します。

list.subList(from, to).clear();
 
indexOf および lastIndexOf でも、同様の慣用法を作成できます。Collections クラスのアルゴリズムがすべて subList に適用できます。

バッキングリスト (すなわち、このリスト) の構造が、返されたリストを経由せずに変更された場合、このメソッドで返されたリストのセマンティクスは保証されません。構造の変更とは、リストのサイズが変わるような変更や、進行中の繰り返し処理が不正な結果に終わるような変更のことです。

この実装は、AbstractList をサブクラス化するリストを返します。このサブクラスは、専用フィールドに、バッキングリスト内の subList のオフセット、subList のサイズ (存続期間中に変更することも可能)、およびバッキングリストの要求される modCount 値を格納します。サブクラスにはバリアントが 2 つあり、そのうちの 1 つには RandomAccess が実装されています。リストが RandomAccess を実装すると、返されたリストは RandomAccess を実装するサブクラスのインスタンスになります。

サブクラスの set(int, E)get(int)add(int, E)remove(int)addAll(int, Collection)、および removeRange(int, int) の各メソッドは、インデックスの境界を調べ、オフセットに合わせて調整したあとで、バッキング抽象リストの対応するメソッドにすべて委譲します。addAll(Collection c) メソッドは、単に addAll(size, c) を返すだけです。

listIterator(int) メソッドは、バッキングリストのリスト反復子への「ラッパーオブジェクト」を返します。この「ラッパーオブジェクト」は、バッキングリストの対応するメソッドで作成されます。iterator メソッドは listIterator() を返すだけであり、同様に、size メソッドはサブクラスの size フィールドを返すだけです。

すべてのメソッドは、最初に、バッキングリストの実際の modCount がその要求された値に等しいかを調べ、そうでない場合は ConcurrentModificationException をスローします。

定義:
インタフェース List<E> 内の subList
パラメータ:
fromIndex - subList の下端点 (これを含む)
toIndex - subList の上端点 (これを含まない)
戻り値:
このリスト内の指定された範囲のビュー
例外:
IndexOutOfBoundsException - 端点のインデックス値が範囲外の場合 (fromIndex < 0 || toIndex > size)
IllegalArgumentException - 端点のインデックスの順序が不正な場合 (fromIndex > toIndex)

equals

public boolean equals(Object o)
指定されたオブジェクトがリストと等しいかどうかを比較します。指定されたオブジェクトもリストであり、サイズが同じで、2 つのリストの対応する要素がすべて「等しい」場合にだけ true を返します。(e1==null ? e2==null : e1.equals(e2)) の場合、2 つの要素 e1e2 は、等しくなります。つまり 2 つのリストは、同じ要素が同じ順序で含まれている場合に等しいものとして定義されます。

この実装は、最初に、指定されたオブジェクトがこのリストであるかどうかを調べます。このリストである場合、実装は true を返します。そうでない場合は、指定されたオブジェクトがリストかどうかを調べ、リストでなければ false を返します。指定されたオブジェクトがリストの場合は、両方のリストの内容を次々調べて、要素の対応するペアを比較します。比較の結果 false が返されることがあれば、このメソッドも false を返します。どちらかのリストの反復子の要素が先になくなった場合は、2 つのリストの長さが等しくないので false を返します。そうでない場合は、繰り返しが完了した時点で true を返します。

定義:
インタフェース Collection<E> 内の equals
定義:
インタフェース List<E> 内の equals
オーバーライド:
クラス Object 内の equals
パラメータ:
o - リストと等しいかどうかを比較するオブジェクト
戻り値:
指定されたオブジェクトがこのリストと等しい場合は true
関連項目:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
このリストのハッシュコード値を返します。

この実装では、List.hashCode() メソッドのドキュメントでリストハッシュ関数を定義するのに使われているコードをそのまま使っています。

定義:
インタフェース Collection<E> 内の hashCode
定義:
インタフェース List<E> 内の hashCode
オーバーライド:
クラス Object 内の hashCode
戻り値:
リストのハッシュコード値
関連項目:
Object.equals(java.lang.Object), Hashtable

removeRange

protected void removeRange(int fromIndex,
                           int toIndex)
fromIndex (これを含む) 〜 toIndex (これを含まない) の範囲のインデックスを持つすべての要素をこのリストから削除します。後続の要素は左に移動します (インデックス値が減少)。この呼び出しにより、(toIndex - fromIndex) の要素数だけ ArrayList が短くなります。toIndex==fromIndex の場合、このオペレーションは何も行いません。

このメソッドは、このリストおよびそのサブリストで clear オペレーションによって呼び出されます。このメソッドをオーバーライドしてリストの実装の特性を最大限に利用するようにすると、このリストおよびそのサブリストに対する clear オペレーションの性能がかなり向上します。

この実装は、fromIndex の前に位置するリスト反復子を取得し、範囲全体が削除されるまで ListIterator.nextListIterator.remove をこの順序で繰り返し呼び出します。注:ListIterator.remove が 1 次時間を必要とする場合、この実装では 2 次時間が必要です。

パラメータ:
fromIndex - 削除する最初の要素のインデックス
toIndex - 削除する最後の要素の直後のインデックス

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 も参照してください。