Java プラットフォーム 1.2

java.util
クラス AbstractList

java.lang.Object
  |
  +--java.util.AbstractCollection
        |
        +--java.util.AbstractList
直接の既知のサブクラス:
AbstractSequentialList, ArrayList, Vector

public abstract class AbstractList
extends AbstractCollection
implements List

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

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

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

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

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

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

導入されたバージョン:
JDK1.2
関連項目:
Collection, List, AbstractSequentialList, AbstractCollection

フィールドの概要
protected  int modCount
          このリストの「構造が変更された」回数です。
 
コンストラクタの概要
protected AbstractList()
          唯一のコンストラクタです。
 
メソッドの概要
 void add(int index, Object element)
          指定された要素を、リストの指定された位置に挿入します (任意のオペレーション)。
 boolean add(Object o)
          指定された要素を List の末尾に追加します (任意のオペレーション)。
 boolean addAll(int index, Collection c)
          指定されたコレクションのすべての要素を、このリストの指定された位置に挿入します (任意のオペレーション)。
 void clear()
          このコレクションからすべての要素を削除します (任意のオペレーション)。
 boolean equals(Object o)
          指定されたオブジェクトとリストが等しいかどうかを比較します。
abstract  Object get(int index)
          このリストの指定された位置にある要素を返します。
 int hashCode()
          このリストのハッシュコード値を返します。
 int indexOf(Object o)
          指定された要素がリスト内で最初に検出された位置のインデックスを返します。
 Iterator iterator()
          このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。
 int lastIndexOf(Object o)
          指定された要素がリスト内で最後に検出された位置のインデックスを返します。
 ListIterator listIterator()
          このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。
 ListIterator listIterator(int index)
          リスト中の指定された位置を始点に、このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。
 Object remove(int index)
          このリストの指定位置にある要素を削除します (任意のオペレーション)。
protected  void removeRange(int fromIndex, int toIndex)
          このリストから、fromIndex で始まり、toIndex の直前で終わるインデックスを持つすべての要素を削除します。
 Object set(int index, Object element)
          このリストの指定された位置にある要素を、指定された要素で置き換えます (任意のオペレーション)。
 List 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
 

フィールドの詳細

modCount

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

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

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

コンストラクタの詳細

AbstractList

protected AbstractList()
唯一のコンストラクタです。サブクラスのコンストラクタによる呼び出しは、通常は暗黙的な呼び出しです。
メソッドの詳細

add

public boolean add(Object o)
指定された要素を List の末尾に追加します (任意のオペレーション)。

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

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

定義:
インタフェース List 内の add
パラメータ:
o - このリストに追加する要素
戻り値:
true (Collection.add の一般規約に従う)
例外:
UnsupportedOperationException - この Set で add メソッドがサポートされていない場合
ClassCastException - 指定された要素のクラスが原因で、セットに要素を追加できなかった場合
IllegalArgumentException - この要素の特性が原因で、セットに要素を追加できなかった場合
オーバーライド:
クラス AbstractCollection 内の add

get

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

set

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

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

定義:
インタフェース List 内の set
パラメータ:
index - 置換する要素のインデックス
element - 指定された位置に格納される要素
戻り値:
指定された位置に格納されていた要素
例外:
UnsupportedOperationException - set メソッドがこの List でサポートされていない場合
ClassCastException - 指定された要素のクラスが原因で、リストに要素を追加できなかった場合
IllegalArgumentException - この要素の特性が原因で、リストに要素を追加できなかった場合
IndexOutOfBoundsException - 指定されたインデックスが範囲外の場合 (index < 0 || index >= size())

add

public void add(int index,
                Object element)
指定された要素を、リストの指定された位置に挿入します (任意のオペレーション)。現在その位置にある要素と後続の要素は右に移動されます (インデックス値に 1 を加算)。

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

定義:
インタフェース List 内の add
パラメータ:
index - 指定された要素を挿入する位置のインデックス
element - 挿入される要素
例外:
UnsupportedOperationException - add メソッドがこのリストでサポートされていない場合
ClassCastException - 指定された要素のクラスが原因で、リストに要素を追加できなかった場合
IllegalArgumentException - この要素の特性が原因で、リストに要素を追加できなかった場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())

remove

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

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

定義:
インタフェース List 内の 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 内の indexOf
パラメータ:
o - 検索対象の要素
戻り値:
指定された要素がリスト内で最初に検出された位置のインデックス。リストにこの要素がない場合は -1

lastIndexOf

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

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

定義:
インタフェース List 内の lastIndexOf
パラメータ:
o - 検索対象の要素
戻り値:
指定された要素がリスト内で最後に検出された位置の要素のインデックス。リストにこの要素がない場合は -1

clear

public void clear()
このコレクションからすべての要素を削除します (任意のオペレーション)。この呼び出しが戻ったあとは、例外がスローされない限り、コレクションは空になります。

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

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

定義:
インタフェース List 内の clear
例外:
UnsupportedOperationException - clear メソッドが Collection によってサポートされていない場合
オーバーライド:
クラス AbstractCollection 内の clear

addAll

public boolean addAll(int index,
                      Collection c)
指定されたコレクションのすべての要素を、このリストの指定された位置に挿入します (任意のオペレーション)。指定された位置に現在ある要素とその後続の要素は右に移動します (インデックス値が増加)。新しい要素がリストに出現する順序は、指定されたコレクションの反復子によって返される順序になります。このオペレーションの進行中に、指定されたコレクションが変更された場合、このオペレーションの動作は不定になります。これは、指定されたコレクションがこのリスト自身で、しかも空ではない場合に起こります。

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

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

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

iterator

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

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

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

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

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

listIterator

public ListIterator listIterator()
このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。 この実装は listIterator(0) を返します。
定義:
インタフェース List 内の listIterator
戻り値:
このリスト内の要素を適切な順序で繰り返し処理する反復子
関連項目:
listIterator(int)

listIterator

public ListIterator listIterator(int index)
リスト中の指定された位置を始点に、このリスト内の要素を適切な順序で繰り返し処理する反復子を返します。指定されたインデックスは、nextElement メソッドを最初に呼び出たときに返される要素を示します。previousElement メソッドを最初に呼び出した場合には、指定されたインデックスから 1 を引いた位置にある要素が返されます。

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

デフォルトでは、この実装で返されるリスト反復子は、その removeset、および add の各メソッド呼び出しに対して UnsupportedOperationException をスローします。リストの remove(int)set(int, Object)、および add(int, Object) の各メソッドをそれぞれオーバーライドしない限り、この例外がスローされます。

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

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

subList

public List subList(int fromIndex,
                    int toIndex)
このリストの、fromIndex で始まり、toIndex の直前で終わる部分のビューを返します。返されるリストはこのリストを基にします。このため、返されたリスト、またはこのリストへの変更は、互いに反映されます。返されるリストは、このリストがサポートする任意のリストオペレーションをすべてサポートします。

このメソッドは、配列で一般的に行われるような、明示的な範囲操作を不要にします。リスト全体の代わりに、subList ビューに対して操作を行うことで、対象としてリストを期待する任意の操作を範囲操作として使用できます。たとえば、次のイディオムは、指定された範囲の要素をリストから削除します。

	    * list.subList(from, to).clear();
 
同様のイディオムは indexOf および lastIndexOf でも構築できます。Collections クラスにあるすべてのアルゴリズムが、subList に適用可能です。

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

この実装は、AbstractList をサブクラス化するリストを返します。このサブクラスは、専用フィールドに、基となるリスト内の subList のオフセット、subList のサイズ (存続期間中に変更することも可能)、および基となるリストに想定される modCount の値を格納します。

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

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

すべてのメソッドは、最初に、基となるリストの実際の modCount が想定される値に等しいかを調べ、そうでない場合は ConcurrentModificationException をスローします。

定義:
インタフェース List 内の subList
パラメータ:
fromIndex - subList の範囲の下端 (この値を含む)
toKey - 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 つの要素 e1 および e2 は等しいことになります。すなわち、2 つのリストに同じ要素が同じ順序で格納されていれば、両者は等しいと定義されます。

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

定義:
インタフェース List 内の equals
パラメータ:
o - このリストと等しいかどうかを比較されるオブジェクト
戻り値:
指定されたオブジェクトがこのリストに等しい場合は true
オーバーライド:
クラス Object 内の equals

hashCode

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

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

定義:
インタフェース List 内の hashCode
戻り値:
このリストのハッシュコード値
オーバーライド:
クラス Object 内の hashCode

removeRange

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

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

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

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

Java プラットフォーム 1.2

バグや機能要求の報告
新しい javadoc の表示についてのコメントやご提案
Java は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-1998 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.