- すべての実装されたインタフェース:
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)
の上位に位置付けられます。
実装の詳細については、このクラスの抽象メソッド以外の各メソッドのドキュメントを参照してください。 より効率的な実装ができるコレクションの場合は、これらのメソッドをオーバーライドしてもかまいません。
このクラスは、Java Collections Frameworkのメンバーです。
- 導入されたバージョン:
- 1.2
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 protected int
modCount
このリストの構造が変更された回数です。 -
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
AbstractList()
唯一のコンストラクタです。 -
メソッドのサマリー
修飾子と型 メソッド 説明 void
add(int index, E element)
このリスト内の指定された位置に、指定された要素を挿入します(オプションの操作)。boolean
add(E e)
指定された要素をこのリストの最後に追加します(オプションの操作)。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)
指定された要素がこのリスト内で最初に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。Iterator<E>
iterator()
このリスト内の要素を適切な順序で反復処理するイテレータを返します。int
lastIndexOf(Object o)
指定された要素がこのリスト内で最後に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。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, toArray, toArray, toString
インタフェース java.util.Collectionで宣言されたメソッド
parallelStream, removeIf, stream, toArray
インタフェース java.util.Listで宣言されたメソッド
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
-
フィールド詳細
-
modCount
protected transient int modCountこのリストの構造が変更された回数です。 構造の変更とは、リストのサイズの変更や、その他の進行中の反復処理が不正な結果をもたらすような変更のことです。このフィールドは、
iterator
メソッドおよびlistIterator
メソッドによって返されるイテレータおよびリスト・イテレータの実装によって使用されます。 このフィールドの値が予期しない形で変化した場合、イテレータやリスト・イテレータはnext
、remove
、previous
、set
、またはadd
のオペレーションに応じてConcurrentModificationException
をスローします。 これは、反復処理中の並行変更を前にして、未確定動作ではなくフェイルファスト動作を提供します。このフィールドをサブクラスで使用するのはオプションです。 サブクラスでフェイルファスト・イテレータ(およびリスト・イテレータ)を提供する場合は、その
add(int, E)
およびremove(int)
メソッド(およびそれがオーバーライドする他のメソッドのうちでリストに構造的な変更を加えるもの)の内部で、このフィールドを増分する必要があるだけです。add(int, E)
またはremove(int)
に対する1回の呼出しでは、フィールドに1だけ加える必要があります。そうしないと、イテレータ(およびリスト・イテレータ)が誤ってConcurrentModificationExceptions
をスローすることになります。 実装でフェイルファスト・イテレータを提供しない場合は、このフィールドを無視してもかまいません。
-
-
コンストラクタの詳細
-
AbstractList
protected AbstractList()唯一のコンストラクタです。 (サブクラスのコンストラクタによる呼出し用で、通常は暗黙的に呼び出されます。)
-
-
メソッドの詳細
-
add
public boolean add(E e)指定された要素をこのリストの最後に追加します(オプションの操作)。このオペレーションをサポートするリストは、リストに追加できる要素に制限を加える場合があります。 特に、リストにはnull要素の追加を拒否するものもあれば、追加される要素の型について制限を加えるものもあります。 Listクラスは、Listに追加できる要素について制約があれば、ドキュメントでそれを明確に指定する必要があります。
- 定義:
add
、インタフェース:Collection<E>
- 定義:
add
、インタフェース:List<E>
- オーバーライド:
add
、クラス:AbstractCollection<E>
- 実装要件:
- この実装では
add(size(), e)
を呼び出します。この実装は、
add(int, E)
がオーバーライドされないかぎりUnsupportedOperationException
をスローします。 - パラメータ:
e
- このリストに追加される要素- 戻り値:
true
(Collection.add(E)
で指定されているとおり)- 例外:
UnsupportedOperationException
-add
オペレーションがこのリストでサポートされない場合ClassCastException
- 指定された要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException
- 指定された要素がnullで、このリストがnull要素を許可しない場合IllegalArgumentException
- この要素のあるプロパティが原因で、このリストにその要素を追加できない場合
-
get
public abstract E get(int index)このリスト内の指定された位置にある要素を返します。- 定義:
get
、インタフェース:List<E>
- パラメータ:
index
- 返される要素のインデックス- 戻り値:
- このリスト内の指定された位置にある要素
- 例外:
IndexOutOfBoundsException
- インデックスが範囲外の場合(index < 0||index>= size()
)
-
set
リスト内の指定された位置にある要素を、指定された要素に置き換えます(オプションの操作)。- 定義:
set
、インタフェース:List<E>
- 実装要件:
- この実装は、常に
UnsupportedOperationException
をスローします。 - パラメータ:
index
- 置換される要素のインデックスelement
- 指定された位置に格納される要素- 戻り値:
- 指定された位置に以前あった要素
- 例外:
UnsupportedOperationException
-set
オペレーションがこのリストでサポートされない場合ClassCastException
- 指定された要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException
- 指定された要素がnullで、このリストがnull要素を許可しない場合IllegalArgumentException
- 指定された要素のあるプロパティが原因で、このリストにその要素を追加できない場合IndexOutOfBoundsException
- インデックスが範囲外の場合(index < 0||index>= size()
)
-
add
public void add(int index, E element)このリスト内の指定された位置に、指定された要素を挿入します(オプションの操作)。 その位置とそれ以降に要素があればそれらを右に移動させ、各要素のインデックスに1を加えます。- 定義:
add
、インタフェース:List<E>
- 実装要件:
- この実装は、常に
UnsupportedOperationException
をスローします。 - パラメータ:
index
- 指定の要素が挿入される位置のインデックスelement
- 挿入される要素- 例外:
UnsupportedOperationException
-add
オペレーションがこのリストでサポートされない場合ClassCastException
- 指定された要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException
- 指定された要素がnullで、このリストがnull要素を許可しない場合IllegalArgumentException
- 指定された要素のあるプロパティが原因で、このリストにその要素を追加できない場合IndexOutOfBoundsException
- インデックスが範囲外の場合(index < 0||index> size()
)
-
remove
public E remove(int index)このリスト内の指定された位置にある要素を削除します(オプションの操作)。 後続の要素は左に移動します(インデックス値から1を減算)。 リストから削除された要素が返されます。- 定義:
remove
、インタフェース:List<E>
- 実装要件:
- この実装は、常に
UnsupportedOperationException
をスローします。 - パラメータ:
index
- 削除される要素のインデックス- 戻り値:
- 指定された位置に以前あった要素
- 例外:
UnsupportedOperationException
-remove
オペレーションがこのリストでサポートされない場合IndexOutOfBoundsException
- インデックスが範囲外の場合(index < 0||index>= size()
)
-
indexOf
public int indexOf(Object o)指定された要素がこのリスト内で最初に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。 より正式には、Objects.equals(o, get(i))
のような最も低いインデックスi
、またはそのようなインデックスがない場合は -1を返します。- 定義:
indexOf
、インタフェース:List<E>
- 実装要件:
- この実装は、
listIterator()
を使って、最初にリスト・イテレータを取得します。 次に、指定された要素が見つかるか、あるいはリストの末尾に達するまで、リストの内容を次々に調べます。 - パラメータ:
o
- 検索する要素- 戻り値:
- 指定された要素がリスト内で最初に検出された位置のインデックス。その要素がリストにない場合は -1
- 例外:
ClassCastException
- 指定された要素の型が、このリストと互換でない場合(オプション)NullPointerException
- 指定された要素がnullで、このリストがnull要素を許可しない場合(オプション)
-
lastIndexOf
public int lastIndexOf(Object o)指定された要素がこのリスト内で最後に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。 より正式には、Objects.equals(o, get(i))
のような最高のインデックスi
、またはそのようなインデックスがない場合は -1を返します。- 定義:
lastIndexOf
、インタフェース:List<E>
- 実装要件:
- この実装は、
listIterator(size())
を使って、最初にリストの末尾を指すリスト・イテレータを取得します。 次に、指定された要素が見つかるか、あるいはリストの先頭に達するまで、リスト内容を逆方向に次々調べます。 - パラメータ:
o
- 検索する要素- 戻り値:
- 指定された要素がリスト内で最後に検出された位置のインデックス。その要素がリストにない場合は -1
- 例外:
ClassCastException
- 指定された要素の型が、このリストと互換でない場合(オプション)NullPointerException
- 指定された要素がnullで、このリストがnull要素を許可しない場合(オプション)
-
clear
public void clear()すべての要素をこのリストから削除します(オプションの操作)。 この呼出しが戻ると、このリストは空になります。- 定義:
clear
、インタフェース:Collection<E>
- 定義:
clear
、インタフェース:List<E>
- オーバーライド:
clear
、クラス:AbstractCollection<E>
- 実装要件:
- この実装では
removeRange(0, size())
を呼び出します。この実装は、
remove(int index)
またはremoveRange(int fromIndex, int toIndex)
がオーバーライドされないかぎりUnsupportedOperationException
をスローします。 - 例外:
UnsupportedOperationException
-clear
オペレーションがこのリストでサポートされない場合
-
addAll
public boolean addAll(int index, Collection<? extends E> c)指定されたコレクション内のすべての要素を、このリストの指定された位置に挿入します(オプションの操作)。 その位置とそれ以降に要素がある場合は、それらを右に移動して、各要素のインデックスに1を加えます。 新しい要素は、指定されたコレクションのイテレータによって返される順序でリストに挿入されます。 オペレーションの進行中に、指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。 (これは、指定されたコレクションがこのリストで、しかも空ではない場合に起こります。)- 定義:
addAll
、インタフェース:List<E>
- 実装要件:
- この実装は、指定されたコレクションのイテレータを取得し、イテレータから取得した要素をこのリストの適切な位置に1つずつ挿入する操作を繰り返します。挿入には
add(int, E)
メソッドを使用します。 多くの場合、実装では、このメソッドをオーバーライドしたほうが効率的です。この実装は、
add(int, E)
がオーバーライドされないかぎりUnsupportedOperationException
をスローします。 - パラメータ:
index
- 指定されたコレクションの最初の要素を挿入する位置のインデックスc
- このリストに追加される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのリストが変更された場合は
true
- 例外:
UnsupportedOperationException
-addAll
オペレーションがこのリストでサポートされない場合ClassCastException
- 指定されたコレクションの要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException
- 指定されたコレクションに1つ以上のnull要素が含まれており、このリストがnull要素を許可しない場合、または指定されたコレクションがnullの場合IllegalArgumentException
- 指定されたコレクションの要素のあるプロパティが原因で、このリストにその要素を追加できない場合IndexOutOfBoundsException
- インデックスが範囲外の場合(index < 0||index> size()
)
-
iterator
このリスト内の要素を適切な順序で反復処理するイテレータを返します。- 定義:
iterator
、インタフェース:Collection<E>
- 定義:
iterator
、インタフェース:Iterable<E>
- 定義:
iterator
、インタフェース:List<E>
- 定義:
iterator
、クラス:AbstractCollection<E>
- 実装要件:
- この実装は、イテレータ・インタフェースの簡単な実装を返します。この処理では、基になるリストの
size()
、get(int)
、およびremove(int)
といった各メソッドを利用します。このメソッドで返されるイテレータは、リストの
remove(int)
メソッドがオーバーライドされないかぎり、remove
メソッドを呼び出すとUnsupportedOperationException
をスローします。この実装は、(protected)
modCount
フィールドの仕様で説明されているように、同時変更を前にして実行時の例外をスローすることもあります。 - 戻り値:
- リスト内の要素を適切な順序で反復処理するイテレータ
-
listIterator
public ListIterator<E> listIterator()このリスト内の要素を適切な順序で反復処理するリスト・イテレータを返します。- 定義:
listIterator
、インタフェース:List<E>
- 実装要件:
- この実装では
listIterator(0)
が返されます。 - 戻り値:
- リスト内の要素を適切な順序で反復処理するリスト・イテレータ
- 関連項目:
listIterator(int)
-
listIterator
public ListIterator<E> listIterator(int index)リスト内の指定された位置で始まる、リスト内の要素を(適切な順序で)反復するリスト・イテレータを返します。 指定されたインデックスは、next
の最初の呼出しによって返される最初の要素を示します。previous
の最初の呼出しは、指定されたインデックスから1を引いたインデックスを持つ要素を返します。- 定義:
listIterator
、インタフェース:List<E>
- 実装要件:
- この実装は、
ListIterator
インタフェースの簡単な実装を返します。ListIteratorインタフェースは、iterator()
メソッドによって返されるIterator
インタフェースの実装を拡張するものです。ListIterator
の実装は、基になるリストのget(int)
、set(int, E)
、add(int, E)
、およびremove(int)
の各メソッドに依存します。この実装で返されるリスト・イテレータは、リストの
remove(int)
、set(int, E)
、およびadd(int, E)
メソッドがオーバーライドされないかぎり、remove
、set
、およびadd
メソッドに応答してUnsupportedOperationException
をスローします。この実装は、(protected)
modCount
フィールドの仕様で説明されているように、同時変更を前にして実行時の例外をスローすることもあります。 - パラメータ:
index
- リスト・イテレータから(next
呼出しによって)返される最初の要素のインデックス- 戻り値:
- リスト内の指定された位置で始まる、リスト内の要素を適切な順序で反復するリスト・イテレータ
- 例外:
IndexOutOfBoundsException
- インデックスが範囲外の場合(index < 0||index> size()
)
-
subList
このリストの、指定されたfromIndex
(これを含む)からtoIndex
(これを含まない)までの部分のビューを返します。fromIndex
とtoIndex
が等しい場合は、空のリストが返されます。 返されるリストはこのリストに連動しているため、返されるリスト内での非構造的な変更はこのリストに反映され、このリスト内での変更は返されるリストに反映されます。 返されるリストは、このリストによってサポートされている、任意のリスト・オペレーションをすべてサポートします。このメソッドは、配列に一般的に見られるような、明示的な範囲操作のための要求を不要にします。 リストを要求するいかなる操作もリスト全体ではなく、subListビュー上で操作することで、範囲操作として使用できます。 たとえば、次の慣用法は、指定された範囲の要素をリストから削除します。
list.subList(from, to).clear();
indexOf
およびlastIndexOf
でも同様のイディオムを構築して、Collections
クラスのすべてのアルゴリズムをsubListに適用できます。バッキング・リスト(すなわち、このリスト)の構造が、返されたリストを経由せずに変更された場合、このメソッドで返されたリストのセマンティックスは保証されません。 構造の変更とは、リストのサイズが変わるような変更や、進行中の反復処理が不正な結果に終わるような変更のことです。
- 定義:
subList
、インタフェース:List<E>
- 実装要件:
- この実装は、
AbstractList
をサブクラス化するリストを返します。 サブクラスは、プライベート・フィールドに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
をスローします。 - パラメータ:
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つの要素e1
とe2
は等しくなります。 つまり2つのリストは、同じ要素が同じ順序で含まれている場合に等しいものとして定義されます。- 定義:
equals
、インタフェース:Collection<E>
- 定義:
equals
、インタフェース:List<E>
- オーバーライド:
equals
、クラス:Object
- 実装要件:
- この実装は、最初に、指定されたオブジェクトがこのリストであるかどうかを調べます。 このリストである場合、実装は
true
を返します。そうでない場合は、指定されたオブジェクトがリストかどうかを調べます。 リストでなければfalse
を返します。指定されたオブジェクトがリストの場合は、両方のリストの内容を次々調べて、要素の対応するペアを比較します。 比較の結果false
が返されることがあれば、このメソッドもfalse
を返します。 どちらかのリストのイテレータの要素が先になくなった場合は、2つのリストの長さが等しくないのでfalse
を返します。そうでない場合は、繰返しが完了した時点でtrue
を返します。 - パラメータ:
o
- このリストと等しいかどうかを比較するオブジェクト- 戻り値:
- 指定されたオブジェクトがこのリストと等しい場合は
true
- 関連項目:
Object.hashCode()
、HashMap
-
hashCode
public int hashCode()このリストのハッシュ・コード値を返します。- 定義:
hashCode
、インタフェース:Collection<E>
- 定義:
hashCode
、インタフェース:List<E>
- オーバーライド:
hashCode
、クラス:Object
- 実装要件:
- この実装では、
List.hashCode()
メソッドのドキュメントでリスト・ハッシュ関数を定義するのに使われているコードをそのまま使っています。 - 戻り値:
- このリストのハッシュ・コード値
- 関連項目:
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
removeRange
protected void removeRange(int fromIndex, int toIndex)fromIndex
(これを含む)からtoIndex
(これを含まない)の範囲のインデックスを持つすべての要素をこのリストから削除します。 後続の要素は左に移動します(インデックス値が減少)。 この呼出しにより、(toIndex - fromIndex)
の要素数だけリストが短くなります。toIndex==fromIndex
の場合、このオペレーションは何も行いません。このメソッドは、このリストおよびそのサブリストで
clear
オペレーションによって呼び出されます。 このメソッドをオーバーライドしてリストの実装の特性を最大限に利用するようにすると、このリストおよびそのサブリストに対するclear
オペレーションの性能がかなり向上します。- 実装要件:
- この実装は、
fromIndex
の前に位置するリスト・イテレータを取得し、範囲全体が削除されるまでListIterator.next
とListIterator.remove
をこの順序で繰返し呼び出します。 ノート:ListIterator.remove
が1次時間を必要とする場合、この実装では2次時間が必要です。 - パラメータ:
fromIndex
- 削除する最初の要素のインデックスtoIndex
- 削除する最後の要素の直後のインデックス
-