|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjava.util.AbstractCollection<E>
java.util.AbstractList<E>
public abstract class AbstractList<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 のメンバーです。
| フィールドの概要 | |
|---|---|
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 |
| フィールドの詳細 |
|---|
protected transient int modCount
このフィールドは、iterator メソッドおよび listIterator メソッドによって返される反復子およびリスト反復子の実装によって使用されます。このフィールドの値が予期しない形で変化した場合、反復子やリスト反復子は next、remove、previous、set、または add オペレーションに応じて ConcurrentModificationException をスローします。これは、繰り返し処理中の並行変更を前にして、未確定動作ではなくフェイルファスト動作を提供します。
このフィールドをサブクラスで使用するのは任意です。サブクラスでフェイルファスト反復子およびリスト反復子を提供する必要がある場合には、単純に、サブクラスの add(int, E) メソッドおよび remove(int) メソッド (および、サブクラスがオーバーライドするメソッドのうちで、リストの構造的な変更をするメソッド) の内部で、このフィールドをインクリメントします。@code 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 をスローします。
Collection<E> 内の addList<E> 内の addAbstractCollection<E> 内の adde - リストに追加される要素
true (Collection.add(E) で指定された場合と同様)
UnsupportedOperationException - リストが add オペレーションをサポートしていない場合
ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合
NullPointerException - 指定された要素が null で、このリストが null 要素を許容しない場合
IllegalArgumentException - この要素のプロパティーが原因で、このリストに追加できない場合public abstract E get(int index)
List<E> 内の getindex - 返される要素のインデックス
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())
public E set(int index,
E element)
この実装は、常に UnsupportedOperationException をスローします。
List<E> 内の setindex - 置換される要素のインデックスelement - 指定された位置に格納される要素
UnsupportedOperationException - set オペレーションがこのリストでサポートされない場合
ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合
NullPointerException - 指定された要素が null で、このリストが null 要素を許容しない場合
IllegalArgumentException - 指定された要素のあるプロパティーが原因で、このリストにその要素を追加できない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())
public void add(int index,
E element)
この実装は、常に UnsupportedOperationException をスローします。
List<E> 内の addindex - 指定の要素が挿入される位置のインデックスelement - 挿入される要素
UnsupportedOperationException - add オペレーションがこのリストでサポートされない場合
ClassCastException - 指定された要素のクラスが原因で、このリストにその要素を追加できない場合
NullPointerException - 指定された要素が null で、このリストが null 要素を許容しない場合
IllegalArgumentException - 指定された要素のあるプロパティーが原因で、このリストにその要素を追加できない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())public E remove(int index)
この実装は、常に UnsupportedOperationException をスローします。
List<E> 内の removeindex - 削除される要素のインデックス
UnsupportedOperationException - remove オペレーションがこのリストでサポートされない場合
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())public int indexOf(Object o)
この実装は、listIterator() を使って、最初にリスト反復子を取得します。次に、指定された要素が見つかるか、あるいはリストの末尾に達するまで、リストの内容を次々に調べます。
List<E> 内の indexOfo - 検索する要素
ClassCastException - 指定された要素の型が、このリストと互換でない場合 (省略可能)
NullPointerException - 指定された要素が null であり、このリストが null 要素を許可しない場合 (省略可能)public int lastIndexOf(Object o)
この実装は、listIterator(size()) を使って、最初にリストの末尾を指すリスト反復子を取得します。次に、指定された要素が見つかるか、あるいはリストの先頭に達するまで、リスト内容を逆方向に次々調べます。
List<E> 内の lastIndexOfo - 検索する要素
ClassCastException - 指定された要素の型が、このリストと互換でない場合 (省略可能)
NullPointerException - 指定された要素が null であり、このリストが null 要素を許可しない場合 (省略可能)public void clear()
この実装は removeRange(0, size()) を呼び出します。
remove(int index) または removeRange(int fromIndex, int toIndex) がオーバーライドされないかぎり、この実装は UnsupportedOperationException をスローします。
Collection<E> 内の clearList<E> 内の clearAbstractCollection<E> 内の clearUnsupportedOperationException - リストが clear オペレーションをサポートしていない場合
public boolean addAll(int index,
Collection<? extends E> c)
この実装は、指定されたコレクションの反復子を取得し、反復子から取得した要素をこのリストの適切な位置に 1 つずつ挿入する操作を繰り返します。挿入には add(int, E) メソッドを使用します。多くの場合、実装では、このメソッドをオーバーライドしたほうが効率的です。
この実装は、add(int, E) がオーバーライドされないかぎり UnsupportedOperationException をスローします。
List<E> 内の addAllindex - 指定されたコレクションの最初の要素を挿入する位置のインデックス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 フィールドの仕様で説明されているように、並行変更を前にして実行時の例外をスローすることもあります。
Iterable<E> 内の iteratorCollection<E> 内の iteratorList<E> 内の iteratorAbstractCollection<E> 内の iteratormodCountpublic ListIterator<E> listIterator()
この実装は listIterator(0) を返します。
List<E> 内の listIteratorlistIterator(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 フィールドの仕様で説明されているように、並行変更を前にして実行時の例外をスローすることもあります。
List<E> 内の listIteratorindex - リスト反復子から (next メソッド呼び出しによって) 返される最初の要素のインデックス
IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index > size())modCount
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 をスローします。
List<E> 内の subListfromIndex - 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 を返します。
Collection<E> 内の equalsList<E> 内の equalsObject 内の equalso - リストと等しいかどうかを比較するオブジェクト
trueObject.hashCode(),
Hashtablepublic int hashCode()
この実装では、List.hashCode() メソッドのドキュメントでリストハッシュ関数を定義するのに使われているコードをそのまま使っています。
Collection<E> 内の hashCodeList<E> 内の hashCodeObject 内の hashCodeObject.equals(java.lang.Object),
Hashtable
protected void removeRange(int fromIndex,
int toIndex)
fromIndex (これを含む) 〜 toIndex (これを含まない) の範囲のインデックスを持つすべての要素をこのリストから削除します。後続の要素は左に移動します (インデックス値が減少)。この呼び出しにより、(toIndex - fromIndex) の要素数だけ ArrayList が短くなります。toIndex==fromIndex の場合、このオペレーションは何も行いません。
このメソッドは、このリストおよびそのサブリストで clear オペレーションによって呼び出されます。このメソッドをオーバーライドしてリストの実装の特性を最大限に利用するようにすると、このリストおよびそのサブリストに対する clear オペレーションの性能がかなり向上します。
この実装は、fromIndex の前に位置するリスト反復子を取得し、範囲全体が削除されるまで ListIterator.next と ListIterator.remove をこの順序で繰り返し呼び出します。Note:ListIterator.remove が 1 次時間を必要とする場合、この実装では 2 次時間が必要です。
fromIndex - 削除する最初の要素のインデックスtoIndex - 削除する最後の要素の直後のインデックス
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。