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, toString
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
parallelStream, removeIf, stream
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
をスローすることになります。実装でフェイルファスト・イテレータを提供しない場合は、このフィールドを無視してもかまいません。
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
、クラス: Object
o
- このリストと等しいかどうかを比較するオブジェクトtrue
Object.hashCode()
, HashMap
public int hashCode()
この実装では、List.hashCode()
メソッドのドキュメントでリスト・ハッシュ関数を定義するのに使われているコードをそのまま使っています。
hashCode
、インタフェース: Collection<E>
hashCode
、インタフェース: List<E>
hashCode
、クラス: Object
Object.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, 2014, Oracle and/or its affiliates. All rights reserved.