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

インタフェースList<E>

型パラメータ:
E - このリスト内に存在する要素の型
すべてのスーパー・インタフェース:
Collection<E>, Iterable<E>, SequencedCollection<E>
既知のすべてのサブインタフェース:
ClassPrinter.ListNodePREVIEW
既知のすべての実装クラス:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

public interface List<E> extends SequencedCollection<E>
順序付けられたコレクション。リスト内の各要素が挿入される場所をユーザーが正確に制御できます。 ユーザーは整数値のインデックス(リスト内の位置)によって要素にアクセスしたり、リスト内の要素を検索したりできます。

セットとは異なり、通常、リストは重複する要素を許可します。 通常、リストではe1.equals(e2)などの要素e1e2のペアが許可され、NULL要素がまったく許可されている場合は通常、複数のNULL要素が許可されます。 ユーザーが重複する値を挿入しようとしたときに実行時の例外をスローすることにより、重複する値を禁止するリストを実装する場合もありますが、このように使われることはほとんどありません。

Listインタフェースは、Collectionインタフェースで指定されたものよりも、iterator, add, remove, equalsおよびhashCodeメソッドの契約に、追加の規定を配置します。 便宜上、ほかの継承メソッドの宣言もここに含まれます。

Listインタフェースには、リスト要素への位置指定(インデックス付き)アクセスのための4つのメソッドが用意されています。 Java配列と同様に、Listのインデックスは0から始まります。 これらの操作は、一部の実装(たとえば、LinkedListクラス)の索引値に比例して実行される場合があります。 このため、呼出し側がこうした実装について知らない場合は、リストにインデックスを付けるよりも、リスト内の要素を反復してください。

Listインタフェースには、Iteratorインタフェースが提供する通常の操作に加えて、要素の挿入と置換、および双方向アクセスを許可する、ListIteratorという特別なイテレータが用意されています。 リスト内の指定した位置から開始するリスト・イテレータを取得するためのメソッドが提供されています。

Listインタフェースには、指定したオブジェクトを検索するための2つのメソッドがあります。 パフォーマンスの観点からは、これらのメソッドは注意して使用する必要があります。 多くの実装でこれらのメソッドは、時間のかかる線形探索を実行します。

Listインタフェースには、リスト内の任意のポイントで複数の要素を効率的に挿入および削除するための2つのメソッドがあります。

ノート: リスト自体を要素として含めることは可能ですが、細心の注意を払ってください: equalsおよびhashCodeメソッドは、このようなリストに適切に定義されなくなりました。

リストの実装には、格納できる要素に制限があるものもあります。 たとえば、null要素を禁止する実装や、null要素の型に制限がある実装もあります。 不適格要素を追加しようとすると、チェックされていない例外(通常はNullPointerExceptionまたはClassCastException)がスローされます。 不適格な要素を照会しようとすると、例外がスローされる場合や、ただfalseを返す場合もあります。前者の動作を実行する実装もあれば、後者の動作を実行する実装もあります。 もう少し一般的に言うと、不適当な要素を処理しようとしてリストへの挿入が完了しない場合、例外がスローされるか成功するかは実装の任意です。 このインタフェースの仕様では、そうした例外は「任意」と記載されています。

変更不可能なLists

List.ofおよびList.copyOf静的ファクトリ・メソッドは、変更不可能なリストを作成する便利な方法を提供します。 これらのメソッドによって作成されたListインスタンスには、次の特性があります:

  • それらはunmodifiableです。 要素を追加、削除または置換することはできません。 Listで任意のmutatorメソッドを呼び出すと、常にUnsupportedOperationExceptionがスローされます。 ただし、含まれている要素自体が可変である場合は、リストの内容が変更される可能性があります。
  • null要素は許可されません。 null要素でそれらを作成しようとすると、NullPointerExceptionになります。
  • すべての要素が直列化可能である場合は、直列化可能です。
  • リスト内の要素の順序は、指定された引数の順序、または指定された配列内の要素の順序と同じです。
  • リストとそのsubListビューは、RandomAccessインタフェースを実装します。
  • それらはvalue-basedです。 プログラマは、equalのインスタンスを交換可能として処理し、同期に使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 呼び出し元は、返されたインスタンスのアイデンティティについて何も想定しないでください。 ファクトリは、新しいインスタンスを作成したり、既存のインスタンスを再利用できます。
  • これらは、「直列化された形式」ページで指定したとおりに直列化されます。

このインタフェースは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.2
関連項目: