クラスAbstractList<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
型パラメータ:
E - このリストの要素のタイプ
すべての実装されたインタフェース:
Iterable<E>, Collection<E>, List<E>, SequencedCollection<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
    このリストの構造が変更された回数です。
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    唯一のコンストラクタです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    add(int index, E element)
    このリスト内の指定された位置に、指定された要素を挿入します(オプションの操作)。
    boolean
    add(E e)
    指定された要素をこのリストの最後に追加します(オプションの操作)。
    boolean
    addAll(int index, Collection<? extends E> c)
    指定されたコレクション内のすべての要素を、このリストの指定された位置に挿入します(オプションの操作)。
    void
    すべての要素をこのリストから削除します(オプションの操作)。
    boolean
    指定されたオブジェクトがこのリストと等しいかどうかを比較します。
    abstract E
    get(int index)
    このリスト内の指定された位置にある要素を返します。
    int
    このリストのハッシュ・コード値を返します。
    int
    指定された要素がこのリスト内で最初に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。
    このリスト内の要素を適切な順序で反復するイテレータを返します。
    int
    指定された要素がこのリスト内で最後に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。
    このリスト内の要素を(適切な順序で)反復するリスト・イテレータを返します。
    listIterator(int index)
    リスト内の指定された位置で始まる、リスト内の要素を(適切な順序で)反復するリスト・イテレータを返します。
    remove(int index)
    このリスト内の指定された位置にある要素を削除します(オプションの操作)。
    protected void
    removeRange(int fromIndex, int toIndex)
    fromIndex (これを含む)からtoIndex (これを含まない)の範囲のインデックスを持つすべての要素をこのリストから削除します。
    set(int index, E element)
    このリスト内の指定された位置にある要素を、指定された要素に置き換えます(オプションの操作)。
    subList(int fromIndex, int toIndex)
    このリストの、指定されたfromIndex (これを含む)からtoIndex (これを含まない)までの部分のビューを返します。

    クラスオブジェクトで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    インタフェースCollectionで宣言されたメソッド

    parallelStream, removeIf, stream, toArray

    インタフェースIterableで宣言されたメソッド

    forEach
  • フィールド詳細

    • modCount

      protected transient int modCount
      このリストの構造が変更された回数です。 構造の変更とは、リストのサイズの変更や、その他の進行中の反復処理が不正な結果をもたらすような変更のことです。

      このフィールドは、iteratorメソッドおよびlistIteratorメソッドによって返されるイテレータおよびリスト・イテレータの実装によって使用されます。 このフィールドの値が予期しない形で変化した場合、イテレータやリスト・イテレータはnextremovepreviousset、または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クラスは、追加できる要素について制約があれば、ドキュメントでそれを明確に記述するようにしてください。

      定義:
      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

      public E set(int index, E element)
      このリスト内の指定された位置にある要素を、指定された要素に置き換えます(オプションの操作)。
      定義:
      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

      public Iterator<E> 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

      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)メソッドがオーバーライドされないかぎり、removeset、およびaddメソッドに応答してUnsupportedOperationExceptionをスローします。

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

      パラメータ:
      index - リスト・イテレータから(next呼出しによって)返される最初の要素のインデックス
      戻り値:
      リスト内の指定された位置で始まる、リスト内の要素を(適切な順序で)反復するリスト・イテレータ
      スロー:
      IndexOutOfBoundsException - インデックスが範囲外の場合(index < 0||index> size())
    • subList

      public List<E> subList(int fromIndex, int toIndex)
      このリストの、指定されたfromIndex (これを含む)からtoIndex (これを含まない)までの部分のビューを返します。 fromIndextoIndexが等しい場合は、空のリストが返されます。 返されるリストはこのリストに連動しているため、返されるリスト内での非構造的な変更はこのリストに反映され、このリスト内での変更は返されるリストに反映されます。 返されるリストは、このリストによってサポートされている、任意のリスト・オペレーションをすべてサポートします。

      このメソッドでは、配列に一般的に見られるような、明示的な範囲操作は必要ありません。 リストを予期する操作は、リスト全体ではなくsubListビューを渡すことで範囲操作として使用できます。 たとえば、次のイディオムは、ある範囲の要素をリストから削除します。

           list.subList(from, to).clear();
      
      indexOfおよびlastIndexOfにも同様のidiomsを構成でき、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つの要素e1e2等しくなります。 つまり2つのリストは、同じ要素が同じ順序で含まれている場合に等しいものとして定義されます。
      定義:
      equals、インタフェースCollection<E>
      定義:
      equals、インタフェースList<E>
      オーバーライド:
      equals、クラスObject
      実装要件:
      この実装は、最初に、指定されたオブジェクトがこのリストであるかどうかを調べます。 このリストである場合、実装はtrueを返します。そうでない場合は、指定されたオブジェクトがリストかどうかを調べます。 リストでなければfalseを返します。指定されたオブジェクトがリストの場合は、両方のリストの内容を次々調べて、要素の対応するペアを比較します。 比較の結果falseが返されることがあれば、このメソッドもfalseを返します。 どちらかのリストのイテレータの要素が先になくなった場合は、2つのリストの長さが等しくないのでfalseを返します。そうでない場合は、繰返しが完了した時点でtrueを返します。
      パラメータ:
      o - このリストと等しいかどうかを比較するオブジェクト
      戻り値:
      指定されたオブジェクトがこのリストと等しい場合はtrue
      関連項目:
    • hashCode

      public int hashCode()
      このリストのハッシュ・コード値を返します。
      定義:
      hashCode、インタフェースCollection<E>
      定義:
      hashCode、インタフェースList<E>
      オーバーライド:
      hashCode、クラスObject
      実装要件:
      この実装では、List.hashCode()メソッドのドキュメントでリスト・ハッシュ関数を定義するのに使われているコードをそのまま使っています。
      戻り値:
      このリストのハッシュ・コード値
      関連項目:
    • removeRange

      protected void removeRange(int fromIndex, int toIndex)
      fromIndex (これを含む)からtoIndex (これを含まない)の範囲のインデックスを持つすべての要素をこのリストから削除します。 後続の要素は左に移動します(インデックス値が減少)。 この呼出しにより、(toIndex - fromIndex)の要素数だけリストが短くなります。 toIndex==fromIndexの場合、このオペレーションは何も行いません。

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

      実装要件:
      この実装は、fromIndexの前に位置するリスト・イテレータを取得し、範囲全体が削除されるまでListIterator.nextListIterator.removeをこの順序で繰返し呼び出します。 ノート: ListIterator.removeが1次時間を必要とする場合、この実装では2次時間が必要です。
      パラメータ:
      fromIndex - 削除する最初の要素のインデックス
      toIndex - 削除する最後の要素の直後のインデックス