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のメンバーです。
| 修飾子と型 | フィールド | 説明 |
|---|---|---|
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) |
指定された要素がこのリスト内で最初に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -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 (これを含まない)までの部分のビューを返します。
|
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toStringaddAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArrayparallelStream, removeIf, streamprotected transient int modCount
このフィールドは、iteratorメソッドおよびlistIteratorメソッドによって返されるイテレータおよびリスト・イテレータの実装によって使用されます。 このフィールドの値が予期しない形で変化した場合、イテレータやリスト・イテレータはnext、remove、previous、set、またはaddのオペレーションに応じてConcurrentModificationExceptionをスローします。 これは、反復処理中の並行変更を前にして、未確定動作ではなくフェイルファスト動作を提供します。
このフィールドをサブクラスで使用するのはオプションです。 サブクラスでフェイルファスト・イテレータ(およびリスト・イテレータ)を提供する場合は、そのadd(int, E)およびremove(int)メソッド(およびそれがオーバーライドする他のメソッドのうちでリストに構造的な変更を加えるもの)の内部で、このフィールドを増分する必要があるだけです。 add(int, E)またはremove(int)に対する1回の呼出しでは、フィールドに1だけ加える必要があります。そうしないと、イテレータ(およびリスト・イテレータ)が誤ってConcurrentModificationExceptionsをスローすることになります。 実装でフェイルファスト・イテレータを提供しない場合は、このフィールドを無視してもかまいません。
protected AbstractList()
public boolean add(E e)
このオペレーションをサポートするリストは、リストに追加できる要素に制限を加える場合があります。 特に、リストにはnull要素の追加を拒否するものもあれば、追加される要素の型について制限を加えるものもあります。 Listクラスは、Listに追加できる要素について制約があれば、ドキュメントでそれを明確に指定する必要があります。
この実装ではadd(size(), e)を呼び出します。
この実装は、add(int, E)がオーバーライドされないかぎりUnsupportedOperationExceptionをスローします。
add、インタフェースCollection<E>add、インタフェースList<E>add、クラスAbstractCollection<E>e - このリストに追加される要素true (Collection.add(E)で指定されているとおり)UnsupportedOperationException - addオペレーションがこのリストでサポートされない場合ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException - 指定された要素がnullで、このリストがnull要素を許可しない場合IllegalArgumentException - この要素のあるプロパティが原因で、このリストにその要素を追加できない場合public abstract E get(int index)
get、インタフェースList<E>index - 返される要素のインデックスIndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index>= size())public E set(int index, E element)
この実装は、常にUnsupportedOperationExceptionをスローします。
set、インタフェースList<E>index - 置換される要素のインデックスelement - 指定された位置に格納される要素UnsupportedOperationException - setオペレーションがこのリストでサポートされない場合ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException - 指定された要素がnullで、このリストがnull要素を許可しない場合IllegalArgumentException - 指定された要素のあるプロパティが原因で、このリストにその要素を追加できない場合IndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index>= size())public void add(int index,
E element)
この実装は、常にUnsupportedOperationExceptionをスローします。
add、インタフェースList<E>index - 指定の要素が挿入される位置のインデックスelement - 挿入される要素UnsupportedOperationException - addオペレーションがこのリストでサポートされない場合ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException - 指定された要素がnullで、このリストがnull要素を許可しない場合IllegalArgumentException - 指定された要素のあるプロパティが原因で、このリストにその要素を追加できない場合IndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index> size())public E remove(int index)
この実装は、常にUnsupportedOperationExceptionをスローします。
remove、インタフェースList<E>index - 削除される要素のインデックスUnsupportedOperationException - removeオペレーションがこのリストでサポートされない場合IndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index>= size())public int indexOf(Object o)
この実装は、listIterator()を使って、最初にリスト・イテレータを取得します。 次に、指定された要素が見つかるか、あるいはリストの末尾に達するまで、リストの内容を次々に調べます。
indexOf、インタフェースList<E>o - 検索する要素ClassCastException - 指定された要素の型が、このリストと互換でない場合(オプション)NullPointerException - 指定された要素がnullで、このリストがnull要素を許可しない場合(オプション)public int lastIndexOf(Object o)
この実装は、listIterator(size())を使って、最初にリストの末尾を指すリスト・イテレータを取得します。 次に、指定された要素が見つかるか、あるいはリストの先頭に達するまで、リスト内容を逆方向に次々調べます。
lastIndexOf、インタフェースList<E>o - 検索する要素ClassCastException - 指定された要素の型が、このリストと互換でない場合(オプション)NullPointerException - 指定された要素がnullで、このリストがnull要素を許可しない場合(オプション)public void clear()
この実装ではremoveRange(0, size())を呼び出します。
この実装は、remove(int index)またはremoveRange(int fromIndex, int toIndex)がオーバーライドされないかぎりUnsupportedOperationExceptionをスローします。
clear、インタフェースCollection<E>clear、インタフェースList<E>clear、クラスAbstractCollection<E>UnsupportedOperationException - clearオペレーションがこのリストでサポートされない場合public boolean addAll(int index,
Collection<? extends E> c)
この実装は、指定されたコレクションのイテレータを取得し、イテレータから取得した要素をこのリストの適切な位置に1つずつ挿入する操作を繰り返します。挿入にはadd(int, E)メソッドを使用します。 多くの場合、実装では、このメソッドをオーバーライドしたほうが効率的です。
この実装は、add(int, E)がオーバーライドされないかぎりUnsupportedOperationExceptionをスローします。
addAll、インタフェースList<E>index - 指定されたコレクションの最初の要素を挿入する位置のインデックスc - このリストに追加される要素を含むコレクションUnsupportedOperationException - addAllオペレーションがこのリストでサポートされない場合ClassCastException - 指定されたコレクションの要素のクラスが原因で、このリストにその要素を追加できない場合NullPointerException - 指定されたコレクションに1つ以上のnull要素が含まれており、このリストがnull要素を許可しない場合、または指定されたコレクションがnullの場合IllegalArgumentException - 指定されたコレクションの要素のあるプロパティが原因で、このリストにその要素を追加できない場合IndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index> size())public Iterator<E> iterator()
この実装は、イテレータ・インタフェースの簡単な実装を返します。この処理では、基になるリストのsize()、get(int)、およびremove(int)といった各メソッドを利用します。
このメソッドで返されるイテレータは、リストのremove(int)メソッドがオーバーライドされないかぎり、removeメソッドを呼び出すとUnsupportedOperationExceptionをスローします。
この実装は、(protected) modCountフィールドの仕様で説明されているように、同時変更を前にして実行時の例外をスローすることもあります。
public ListIterator<E> listIterator()
この実装ではlistIterator(0)が返されます。
listIterator、インタフェースList<E>listIterator(int)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)メソッドがオーバーライドされないかぎり、remove、set、およびaddメソッドに応答してUnsupportedOperationExceptionをスローします。
この実装は、(protected) modCountフィールドの仕様で説明されているように、同時変更を前にして実行時の例外をスローすることもあります。
listIterator、インタフェースList<E>index - リスト・イテレータから(next呼出しによって)返される最初の要素のインデックスIndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index> size())public List<E> subList(int fromIndex, int toIndex)
このメソッドは、配列に一般的に見られるような、明示的な範囲操作のための要求を不要にします。 リストを要求するいかなる操作もリスト全体ではなく、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をスローします。
subList、インタフェースList<E>fromIndex - subListの下端点(これを含む)toIndex - subListの上端点(これを含まない)IndexOutOfBoundsException - 端点のインデックス値が範囲外の場合(fromIndex < 0||toIndex> size)IllegalArgumentException - 端点のインデックスの順番が正しくない場合(fromIndex> toIndex)public boolean equals(Object o)
trueを返します。 (e1==null ? e2==null : e1.equals(e2))の場合、2つの要素e1とe2は等しくなります。 つまり2つのリストは、同じ要素が同じ順序で含まれている場合に等しいものとして定義されます。
この実装は、最初に、指定されたオブジェクトがこのリストであるかどうかを調べます。 このリストである場合、実装はtrueを返します。そうでない場合は、指定されたオブジェクトがリストかどうかを調べます。 リストでなければfalseを返します。指定されたオブジェクトがリストの場合は、両方のリストの内容を次々調べて、要素の対応するペアを比較します。 比較の結果falseが返されることがあれば、このメソッドもfalseを返します。 どちらかのリストのイテレータの要素が先になくなった場合は、2つのリストの長さが等しくないのでfalseを返します。そうでない場合は、繰返しが完了した時点でtrueを返します。
equals、インタフェースCollection<E>equals、インタフェースList<E>equals、クラスObjecto - このリストと等しいかどうかを比較するオブジェクトtrueObject.hashCode()、HashMappublic int hashCode()
この実装では、List.hashCode()メソッドのドキュメントでリスト・ハッシュ関数を定義するのに使われているコードをそのまま使っています。
hashCode、インタフェースCollection<E>hashCode、インタフェースList<E>hashCode、クラスObjectObject.equals(java.lang.Object), System.identityHashCode(java.lang.Object)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 - 削除する最後の要素の直後のインデックス バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。