モジュール java.base
パッケージ java.util

クラスAbstractList<E>

  • すべての実装されたインタフェース:
    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.lang.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クラスは、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(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)メソッドがオーバーライドされないかぎり、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でも同様のイディオムを構築して、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
        関連項目:
        Object.hashCode()HashMap
      • 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 - 削除する最後の要素の直後のインデックス