- 型パラメータ:
E
- このコレクション内の要素の型
- すべてのスーパー・インタフェース:
Iterable<E>
- 既知のすべてのサブインタフェース:
BeanContext
,BeanContextServices
,BlockingDeque<E>
,BlockingQueue<E>
,Deque<E>
,EventSet
,List<E>
,NavigableSet<E>
,Queue<E>
,Set<E>
,SortedSet<E>
,TransferQueue<E>
- 既知のすべての実装クラス:
AbstractCollection
,AbstractList
,AbstractQueue
,AbstractSequentialList
,AbstractSet
,ArrayBlockingQueue
,ArrayDeque
,ArrayList
,AttributeList
,BeanContextServicesSupport
,BeanContextSupport
,ConcurrentHashMap.KeySetView
,ConcurrentLinkedDeque
,ConcurrentLinkedQueue
,ConcurrentSkipListSet
,CopyOnWriteArrayList
,CopyOnWriteArraySet
,DelayQueue
,EnumSet
,HashSet
,JobStateReasons
,LinkedBlockingDeque
,LinkedBlockingQueue
,LinkedHashSet
,LinkedList
,LinkedTransferQueue
,PriorityBlockingQueue
,PriorityQueue
,RoleList
,RoleUnresolvedList
,Stack
,SynchronousQueue
,TreeSet
,Vector
Set
およびList
のような、より用途の特定されたサブインタフェースを提供します。 このインタフェースは、通常は、最大限の普遍性が求められる場面でコレクションを渡したり、そのコレクションを操作するために使用されます。
Bagまたはマルチセット (重複要素を格納できる、順序付けのないコレクション)は、このインタフェースを直接実装する必要があります。
汎用Collection
実装クラス(通常、サブインタフェースを介して間接的にCollection
を実装する)は、2つの「標準」コンストラクタを提供しなければいけません。空のコレクションを作成するvoid (引数なし)コンストラクタと、Collection
型の引数を1つ持ち、その引数と同じ要素で新しいコレクションを作成するコンストラクタです。 したがって、後者のコンストラクタでは、ユーザーはどのコレクションでもコピーでき、希望の実装型のコレクションと完全に同じコレクションを生成できます。 この規約は義務付けられているわけではありませんが(インタフェースはコンストラクタを格納できないため)、Javaプラットフォーム・ライブラリにおけるすべての汎用Collection
の実装はこの規約に準拠しています。
特定のメソッドはoptionalに指定されています。 コレクション実装が特定の操作を実装していない場合は、UnsupportedOperationException
をスローする対応するメソッドを定義する必要があります。 このようなメソッドは、コレクション・インタフェースのメソッド仕様に"オプションの操作"とマークされています。
いくつかのコレクション実装には、要素に含まれる可能性のある制限があります。 たとえば、null要素を禁止する実装や、null要素の型に制限がある実装もあります。 不適格な要素を追加しようとすると、通常NullPointerException
またはClassCastException
のような非チェック例外がスローされます。 不適格な要素を照会しようとすると、例外がスローされる場合や、ただfalseを返す場合もあります。前者の動作を実行する実装もあれば、後者の動作を実行する実装もあります。 ほとんどの場合、処理が完了しても不適格な要素のコレクションへの挿入が発生しないような不適格な要素の処理を試みると、実装のオプションに応じて例外がスローされるか、または正常に終了します。 このインタフェースの仕様では、そうした例外は「任意」と記載されています。
独自の同期ポリシーを決定するかどうかは、それぞれのコレクションによって異なります。 実装による強い保証がない場合、別のスレッドによって変更されるコレクションでメソッドを呼び出すと、定義されていない動作が発生する可能性があります。これには、直接の呼び出し、呼出しを実行する可能性があるメソッドへのコレクションの引渡し、および既存のイテレータを使用したコレクションの検査が含まれます。
Collections Frameworkインタフェース内の多数のメソッドは、equals
メソッドとの関連で定義されます。 たとえば、contains(Object o)
メソッドの仕様は、「このコレクションに (o==null ? e==null : o.equals(e))
を満たす要素e
が1つ以上含まれる場合にのみ、true
を返す」というものです。 この仕様は、「null以外の引数o
を使用してCollection.contains
を呼び出すと、要素e
でo.equals(e)
が呼び出される」と理解すべきではありません。 実装は、最初に2つの要素のハッシュ・コードを比較するなど、equals
呼出しを回避するための最適化を自由に実装できます。 (Object.hashCode()
仕様では、等価ではないハッシュ・コードを保持する2つのオブジェクトは等価ではないことが保証されます。) もう少し一般的に言うと、さまざまなCollections Frameworkインタフェースの実装で、実装者が適切と判断するなら、基本となるObject
メソッドの指定された動作を自由に利用できます。
コレクションの再帰的なトラバーサルを行うコレクション操作の中には、コレクションにそれ自身が直接または間接的に含まれる自己参照型インスタンスの例外によって失敗するものがあります。 これには、clone()
、equals()
、hashCode()
、およびtoString()
メソッドが含まれます。 実装ではオプションで自己参照シナリオを処理できますが、最新の実装では行われていません。
コレクションを表示
ほとんどのコレクションでは、格納されている要素のストレージが管理されます。 対照的に、「コレクションを表示」自体は要素を格納しませんが、実際の要素を格納するためにバッキング・コレクションに依存します。 ビュー・コレクション自体で処理されない操作は、バッキング・コレクションに委任されます。 ビュー・コレクションの例には、Collections.checkedCollection
、Collections.synchronizedCollection
、およびCollections.unmodifiableCollection
などのメソッドによって返されるラッパー・コレクションが含まれます。 ビュー・コレクションの他の例には、List.subList
、NavigableSet.subSet
、またはMap.entrySet
によって提供されるような、同じ要素の異なる表現を提供するコレクションが含まれます。 バッキング・コレクションに加えられたすべての変更は、ビュー・コレクションに表示されます。 これに対応して、ビュー・コレクションに加えられた変更 - 変更が許可されている場合 - バッキング・コレクションに書き込まれます。 彼らは技術的にコレクションではありませんが、Iterator
とListIterator
のインスタンスでは、バッキング・コレクションに変更を書き込むことができます。場合によっては、バッキング・コレクションの変更を反復処理中にIteratorで見ることができます。
変更不可能なコレクション
このインタフェースの特定のメソッドは"destructive"とみなされ、"mutator"メソッドと呼ばれ、操作対象のコレクション内に含まれるオブジェクトのグループを変更します。 このコレクションの実装が操作をサポートしていない場合、UnsupportedOperationException
をスローするように指定することができます。 そのようなメソッドは、呼び出しがコレクションに影響を与えない場合、UnsupportedOperationException
をスローする必要があります。 たとえば、add
操作をサポートしていないコレクションを考えてみましょう。 addAll
メソッドがこのコレクションで呼び出され、引数として空のコレクションがある場合はどうなりますか? ゼロ要素の追加は効果がないため、このコレクションでは何もしないで例外をスローすることはできません。 ただし、このような場合は、例外をスローすると無条件に例外がスローされることが推奨されます。
「変更不可能なコレクション」はコレクションであり、すべてのメソッド(上で定義したように)がUnsupportedOperationException
をスローするように指定されています。 したがって、そのようなコレクションは、その上の任意のメソッドを呼び出すことによって変更することはできません。 コレクションを適切に変更できないようにするには、コレクションから派生したビュー・コレクションも変更不可能でなければなりません。 たとえば、Listを変更できない場合、List.subList
によって返されたListも変更不可能です。
変更不可能なコレクションは必ずしも変更できません。 含まれている要素が変更可能な場合、コレクション全体が変更不可能であっても、明らかに変更可能です。 たとえば、変更可能な要素を含む2つの変更不可能なリストを考えてみましょう。 両方のリストが変更不可能であっても、要素が変更された場合、list1.equals(list2)
を呼び出した結果は、呼び出しごとに異なる場合があります。 ただし、変更不能なコレクションにすべての変更不能な要素が含まれている場合は、効果的に不変であると見なすことができます。
変更不可能なビュー・コレクション
「変更不可能なビュー・コレクション」は変更不可能なコレクションで、バッキング・コレクションのビューです。 そのメソッドは上記のようにUnsupportedOperationException
をスローしますが、読み込みメソッドと問合せメソッドはバッキング・コレクションに委譲されます。 その効果は、バッキング・コレクションへの読み取り専用アクセスを提供することです。 これは、内部コレクションへの読み取りアクセスをユーザーに提供し、そのコレクションが予期せず変更されるのを防ぐために役立ちます。 変更不可能なビュー・コレクションの例は、Collections.unmodifiableCollection
、Collections.unmodifiableList
、および関連するメソッドによって返されるビュー・コレクションです。
バッキング・コレクションへの変更は引き続き可能であり、変更が発生した場合は変更不可能なビューで表示されることに注意してください。 したがって、変更不可能なビュー・コレクションは必ずしも不変であるとは限りません。 ただし、変更不可能なビューのバッキング・コレクションが効果的に不変である場合、またはバッキング・コレクションへの参照が変更不可能なビューのみである場合、ビューは効果的に不変であるとみなすことができます。
コレクションの直列化可能性
コレクションの直列化可能性はオプションです。 このため、どのコレクション・インタフェースもSerializable
インタフェースを実装するように宣言されていません。 ただし、直列化可能性は一般に有用と考えられるため、ほとんどの収集実装は直列化可能です。
(ArrayList
またはHashMap
などの)のパブリック・クラスであるコレクション実装は、実際に直列化可能なSerializable
インタフェースを実装するように宣言されています。 一部のコレクション実装は、「変更不可能なコレクション」などのパブリック・クラスではありません。 このような場合、このようなコレクションの直列化可能性については、そのコレクションを作成するメソッドの指定またはその他の適切な場所で説明されています。 コレクションの直列化可能性が指定されていない場合、このような収集の直列化可能性に関する保証はありません。 特に、多くの「コレクションを表示」は直列化可能ではありません。
Serializable
インタフェースを実装するコレクション実装は、直列化可能であることを保証できません。 その理由は、コレクションには他の型の要素が含まれているため、一部の要素型のインスタンスが実際に直列化可能かどうかを静的に判断できないためです。 たとえば、E
がSerializable
インタフェースを実装していない直列化可能なCollection<E>
について考えてみます。 コレクションは、E
の直列化可能なサブタイプの要素のみが含まれている場合、または空の場合は、直列化可能です。 このため、コレクションは、コレクション全体の直列化可能性として「条件付きで直列化可能」と言われています。これは、コレクション自体が直列化可能かどうか、および含まれるすべての要素も直列化可能かどうかによって異なります。
SortedSet
およびSortedMap
のインスタンスでは追加のケースが発生します。 これらのコレクションは、セット要素またはマップ・キーに順序付けを行うComparator
を使用して作成できます。 そのようなコレクションは、Comparator
が直列化可能である場合にのみ直列化可能です。
このインタフェースは、Java Collections Frameworkのメンバーです。
- 実装要件:
- デフォルトのメソッド実装(継承または別の方法によるもの)は、同期プロトコルを適用しません。
Collection
の実装に特定の同期プロトコルが含まれている場合は、デフォルトの実装をオーバーライドしてそのプロトコルを適用する必要があります。 - 導入されたバージョン:
- 1.2
- 関連項目:
-
メソッドのサマリー
修飾子と型メソッド説明boolean
指定された要素がこのコレクションに格納されていることを保証します(オプションの操作)。boolean
addAll
(Collection<? extends E> c) 指定されたコレクションのすべての要素をこのコレクションに追加します(オプションの操作)。void
clear()
このコレクションからすべての要素を削除します(オプションの操作)。boolean
指定された要素がコレクションに含まれている場合にtrue
を返します。boolean
containsAll
(Collection<?> c) 指定されたコレクションのすべての要素がこのコレクション内にある場合はtrue
を返します。boolean
指定されたオブジェクトとこのコレクションが等しいかどうかを比較します。int
hashCode()
コレクションのハッシュ・コード値を返します。boolean
isEmpty()
このコレクションに要素がない場合にtrue
を返します。iterator()
コレクションの要素のイテレータを返します。このコレクションをソースとして、潜在的に並列のStream
を返します。boolean
指定された要素のインスタンスがこのコレクションにあれば、そのインスタンスをコレクションから1つ削除します(オプションの操作)。boolean
removeAll
(Collection<?> c) 指定されたコレクションにも格納されているこのコレクションのすべての要素を削除します(オプションの操作)。default boolean
指定された述語を満たすこのコレクションの要素をすべて削除します。boolean
retainAll
(Collection<?> c) このコレクションにおいて、指定されたコレクションに格納されている要素だけを保持します(オプションの操作)。int
size()
このコレクション中の要素の数を返します。default Spliterator<E>
このコレクション内の要素に対するSpliterator
を作成します。stream()
このコレクションをソースとして使用して、逐次的なStream
を返します。Object[]
toArray()
このコレクションの要素がすべて格納されている配列を返します。default <T> T[]
toArray
(IntFunction<T[]> generator) 指定されたgenerator
関数を使用してこのコレクションのすべての要素を含む配列を返し、返された配列を割り当てます。<T> T[]
toArray
(T[] a) このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。
-
メソッドの詳細
-
size
int size()このコレクション中の要素の数を返します。 このコレクションにInteger.MAX_VALUE
より多くの要素がある場合は、Integer.MAX_VALUE
を返します。- 戻り値:
- このコレクションの要素数
-
isEmpty
boolean isEmpty()このコレクションに要素がない場合にtrue
を返します。- 戻り値:
- このコレクションに要素が含まれていない場合は
true
-
contains
boolean contains(Object o) 指定された要素がコレクションに含まれている場合にtrue
を返します。 より正式には、true
は、このコレクションに少なくとも1つの要素e
(Objects.equals(o, e)
など)が含まれている場合にのみ返されます。- パラメータ:
o
- このコレクション内にあるかどうかが判定される要素- 戻り値:
- 指定された要素がこのコレクション内にある場合は
true
- throws:
ClassCastException
- 指定された要素の型が、このコレクションと互換でない場合(オプション)NullPointerException
- 指定された要素がnullで、このコレクションがnull要素を許可しない場合(オプション)
-
iterator
コレクションの要素のイテレータを返します。 要素が返される順序についての保証はありません。ただし、このコレクションが、保証を提供するクラスのインスタンスである場合は例外です。 -
toArray
Object[] toArray()このコレクションの要素がすべて格納されている配列を返します。 イテレータによって要素が返される順序をコレクションが保証する場合、このメソッドは同じ順序で要素を返さなければなりません。 返される配列「ランタイム・コンポーネント・タイプ」はObject
です。返される配列への参照をコレクションが維持しないという点で、この配列は安全です。 つまり、このメソッドは、コレクションが配列に連動している場合でも新しい配列を割り当てます。 このため、呼出し側は、返された配列を自由に変更できます。
- APIのノート:
- このメソッドは、配列ベースおよびコレクションベースのAPIの間のブリッジ渡し役として機能します。 ランタイム・タイプが
Object[]
の配列を戻します。toArray(T[])
を使用して既存の配列を再利用するか、toArray(IntFunction)
を使用して配列の実行時の型を制御します。 - 戻り値:
- 「ランタイム・コンポーネント・タイプ」が
Object
の配列。このコレクションのすべての要素を含む
-
toArray
<T> T[] toArray(T[] a) このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。 コレクションが指定された配列に収まる場合は、その中に返されます。 そうでない場合は、指定された配列の実行時の型とコレクションのサイズを持つ新しい配列が割り当てられます。このコレクションが指定された配列に収まり、その配列にさらに余裕がある場合(つまり、配列がこのコレクションより多くの要素を持つ場合)、その配列内でコレクションの終端よりあとの要素は
null
に設定されます。 このコレクションにnull
要素がないことを呼出し側が知っている場合にだけ、この特性を利用してコレクションの長さを判断できます。イテレータによって要素が返される順序をコレクションが保証する場合、このメソッドは同じ順序で要素を返さなければなりません。
- APIのノート:
- このメソッドは、配列ベースおよびコレクションベースのAPIの間のブリッジ渡し役として機能します。 特定の状況で既存の配列を再利用できます。
toArray()
を使用して、実行時タイプがObject[]
である配列を作成するか、toArray(IntFunction)
を使用して配列の実行時タイプを制御します。x
が、文字列だけからなるコレクションであることがわかっていると仮定します。 次のコードを使用すると、コレクションを、以前に割り当てられたString
配列にダンプできます。String[] y = new String[SIZE]; ... y = x.toArray(y);
新しい配列が割り当てられ、コレクション
x
が既存の配列y
に格納する要素が多すぎる場合に返されるため、戻り値はy
変数に再割当てされます。toArray(new Object[0])
は、機能の点でtoArray()
と同一です。 - 型パラメータ:
T
- コレクションを格納する配列のコンポーネント型- パラメータ:
a
- 配列が十分な大きさを持つ場合は、このコレクションの要素の格納先の配列。配列のサイズが十分でない場合は、同じ実行時の型で新しい配列が格納用として割り当てられる。- 戻り値:
- コレクションのすべての要素が格納されている配列
- throws:
ArrayStoreException
- このコレクション内の要素の実行時の型が、指定された配列の「ランタイム・コンポーネント・タイプ」に代入可能でない場合NullPointerException
- 指定された配列がnullである場合
-
toArray
default <T> T[] toArray(IntFunction<T[]> generator) 指定されたgenerator
関数を使用してこのコレクションのすべての要素を含む配列を返し、返された配列を割り当てます。イテレータによって要素が返される順序をコレクションが保証する場合、このメソッドは同じ順序で要素を返さなければなりません。
- APIのノート:
- このメソッドは、配列ベースおよびコレクションベースのAPIの間のブリッジ渡し役として機能します。 これにより、特定の実行時タイプの配列を作成できます。
toArray()
を使用して、ランタイム型がObject[]
の配列を作成するか、toArray(T[])
を使用して既存の配列を再利用します。x
が、文字列だけからなるコレクションであることがわかっていると仮定します。 次のコードを使うと、新しく割り当てられたString
の配列内にコレクションをダンプできます。String[] y = x.toArray(String[]::new);
- 実装要件:
- デフォルトの実装では、ゼロのジェネレータ関数をコールしてから、生成された配列を
toArray(T[])
に渡します。 - 型パラメータ:
T
- コレクションを格納する配列のコンポーネント型- パラメータ:
generator
- 要求された型と指定された長さを持つ新しい配列を生成する関数- 戻り値:
- コレクションのすべての要素が格納されている配列
- throws:
ArrayStoreException
- このコレクションのいずれかの要素の実行時タイプが、生成された配列の「ランタイム・コンポーネント・タイプ」に割り当てられない場合NullPointerException
- ジェネレータ・ファンクションがNullの場合- 導入されたバージョン:
- 11
-
add
boolean add(E e) 指定された要素がこのコレクションに格納されていることを保証します(オプションの操作)。 この呼出しの結果、コレクションが変更された場合はtrue
を返します。 このコレクションが要素の重複を許可せず、指定された要素がすでに含まれている場合はfalse
を返します。このオペレーションをサポートするコレクションでは、コレクションに追加できる要素について制限がある場合があります。 たとえば、コレクションによっては、
null
要素の追加が許可されないことや、追加される要素の型を制限することがあります。 追加される要素に関して制限がある場合は、そのCollectionクラスのドキュメントに明示すべきでしょう。その要素がすでにあるという以外の理由で特定の要素の追加を拒否する場合、コレクションは
false
を返すのではなく例外をスローする必要があります。 これにより、この呼出しが戻ったあとにコレクションが指定された要素を必ず格納するという不変性を保つことができます。- パラメータ:
e
- このコレクションにあるかどうかを調べる要素- 戻り値:
- 呼出しの結果としてこのコレクションが変更された場合は
true
- throws:
UnsupportedOperationException
-add
オペレーションがこのコレクションでサポートされない場合ClassCastException
- 指定された要素のクラスが原因で、このコレクションにその要素を追加できない場合NullPointerException
- 指定された要素がnullで、このコレクションがnull要素を許可しない場合IllegalArgumentException
- 要素のあるプロパティが原因で、このコレクションに要素を追加できない場合IllegalStateException
- 挿入制限のため、この時点で要素を追加できない場合
-
remove
boolean remove(Object o) 指定された要素のインスタンスがこのコレクションにあれば、そのインスタンスをコレクションから1つ削除します(オプションの操作)。 より正式には、Objects.equals(o, e)
のような要素e
を削除します(このコレクションに1つ以上の要素が含まれている場合)。 指定された要素がこのコレクションに含まれていた場合、つまり、呼出しの結果としてこのコレクションが変更された場合にtrue
を返します。- パラメータ:
o
- このコレクションから削除される要素(その要素が存在する場合)- 戻り値:
- この呼出しの結果として要素が削除された場合は
true
- throws:
ClassCastException
- 指定された要素の型が、このコレクションと互換でない場合(オプション)NullPointerException
- 指定された要素がnullで、このコレクションがnull要素を許可しない場合(オプション)UnsupportedOperationException
-remove
オペレーションがこのコレクションでサポートされない場合
-
containsAll
boolean containsAll(Collection<?> c) 指定されたコレクションのすべての要素がこのコレクション内にある場合はtrue
を返します。- パラメータ:
c
- このコレクションにあるかどうかを調べるコレクション- 戻り値:
- 指定されたコレクションのすべての要素がこのコレクション内にある場合は
true
- throws:
ClassCastException
- 指定されたコレクションの1つ以上の要素の型が、このコレクションと互換でない場合(オプション)NullPointerException
- 指定されたコレクションに1つ以上のnull要素が含まれており、このコレクションがnull要素を許可しない場合(オプション)、または指定されたコレクションがnullの場合。- 関連項目:
-
addAll
boolean addAll(Collection<? extends E> c) 指定されたコレクションのすべての要素をこのコレクションに追加します(オプションの操作)。 オペレーションの進行中に、指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。 したがって、指定されたコレクションがこのコレクション自身であり、このコレクションが空ではない場合、この呼出しの動作は定義されていません。- パラメータ:
c
- このコレクションに追加される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのコレクションが変更された場合は
true
- throws:
UnsupportedOperationException
-addAll
オペレーションがこのコレクションでサポートされない場合ClassCastException
- 指定されたコレクションの要素のクラスが原因で、このコレクションにその要素を追加できない場合NullPointerException
- 指定されたコレクション内にnull要素が含まれ、このコレクションがnull要素を許可しない場合。または指定されたコレクションがnullの場合IllegalArgumentException
- 指定されたコレクションの要素のあるプロパティが原因で、このコレクションにその要素を追加できない場合IllegalStateException
- 挿入制限のため、この時点で一部の要素を追加できない場合- 関連項目:
-
removeAll
boolean removeAll(Collection<?> c) 指定されたコレクションにも格納されているこのコレクションのすべての要素を削除します(オプションの操作)。 この呼出しの結果、このコレクションには指定されたコレクションと共通の要素はなくなります。- パラメータ:
c
- このコレクションから削除される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのコレクションが変更された場合は
true
- throws:
UnsupportedOperationException
-removeAll
メソッドがこのコレクションでサポートされない場合ClassCastException
- このコレクション内の1つ以上の要素の型が、指定されたコレクションと互換でない場合(オプション)NullPointerException
- このコレクションに1つ以上のnull要素が含まれており、指定されたコレクションがnull要素をサポートしない場合(オプション)、または指定されたコレクションがnullの場合- 関連項目:
-
removeIf
指定された述語を満たすこのコレクションの要素をすべて削除します。 反復中に、または述語によってスローされたエラーまたは実行時例外は、呼出し側に中継されます。- 実装要件:
- デフォルトの実装では、その
iterator()
を使用してコレクションのすべての要素をトラバースします。 一致する各要素は、Iterator.remove()
を使って削除されます。 コレクションのイテレータが削除をサポートしていない場合は、最初に一致する要素に対してUnsupportedOperationException
がスローされます。 - パラメータ:
filter
- 削除される要素に対してtrue
を返す述語- 戻り値:
- 要素が削除された場合は
true
- throws:
NullPointerException
- 指定されたフィルタがnullである場合UnsupportedOperationException
- このコレクションから要素を削除できない場合。 一致する要素を削除できない場合、または一般的に削除がサポートされていない場合、実装によってこの例外がスローされることがあります。- 導入されたバージョン:
- 1.8
-
retainAll
boolean retainAll(Collection<?> c) このコレクションにおいて、指定されたコレクションに格納されている要素だけを保持します(オプションの操作)。 つまり、指定されたコレクションに格納されていないすべての要素をこのコレクションから削除します。- パラメータ:
c
- このコレクションで保持される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのコレクションが変更された場合は
true
- throws:
UnsupportedOperationException
-retainAll
オペレーションがこのコレクションでサポートされない場合ClassCastException
- このコレクション内の1つ以上の要素の型が、指定されたコレクションと互換でない場合(オプション)NullPointerException
- このコレクションに1つ以上のnull要素が含まれており、指定されたコレクションがnull要素を許可しない場合(オプション)、または指定されたコレクションがnullの場合- 関連項目:
-
clear
void clear()このコレクションからすべての要素を削除します(オプションの操作)。 このメソッドが戻ると、コレクションは空になります。- throws:
UnsupportedOperationException
-clear
オペレーションがこのコレクションでサポートされない場合
-
equals
boolean equals(Object o) 指定されたオブジェクトとこのコレクションが等しいかどうかを比較します。Collection
インタフェースはObject.equals
の汎用規約に条項を追加しませんが、Collection
を「直接」に実装する(つまり、Collection
であり、Set
またはList
ではないクラスを作成する)ときには、Object.equals
をオーバーライドする場合に配慮が必要です。 そうする必要がない場合、もっとも単純な方法はObject
の実装に依存することですが、実装によっては、デフォルトの「参照比較」の代わりに「値比較」を実装する必要があることがあります。List
およびSet
インタフェースでは、このような値比較が必要です。Object.equals
メソッドの一般規約によると、equalsは対称的でなければいけません(つまり、b.equals(a)
の場合にだけa.equals(b)
)。List.equals
およびSet.equals
の規約によると、リストはほかのリストとだけ等しくなり、セットはほかのセットとだけ等しくなります。 このため、List
とSet
のどちらのインタフェースも実装しないコレクション・クラスのカスタムequals
メソッドは、このコレクションがリストまたはセットと比較された場合にfalse
を返します。 同じ論理により、Set
とList
の両インタフェースを正しく実装するクラスを記述することはできません。 -
hashCode
int hashCode()コレクションのハッシュ・コード値を返します。Collection
インタフェースはObject.hashCode
メソッドの一般規約に条項を追加しませんが、プログラミングにおいて、Object.equals
メソッドをオーバーライドするクラスは、Object.hashCode
メソッドの一般規約を満たすためにObject.hashCode
メソッドもオーバーライドしなければならないことに注意してください。 特に、c1.equals(c2)
はc1.hashCode()==c2.hashCode()
を意味します。 -
spliterator
default Spliterator<E> spliterator()このコレクション内の要素に対するSpliterator
を作成します。 実装では、このスプリッテレータによって報告された特性値をドキュメント化する必要があります。 スプリッテレータがSpliterator.SIZED
を報告し、このコレクションに要素が1つも含まれていない場合は、そのような特性値が報告される必要はありません。デフォルトの実装は、より効率的なスプリッテレータを返すことができるサブクラスによってオーバーライドされるべきです。
stream()
およびparallelStream()
メソッドの期待される遅延動作を維持するために、スプライテータはIMMUTABLE
またはCONCURRENT
の特性を持つか、またはlate-bindingである必要があります。 これらのどれも実現できない場合、オーバーライドするクラスはバインディングおよび構造上の干渉に関するスプリッテレータのドキュメント化されたポリシーを記述し、次にあるようにstream()
およびparallelStream()
メソッドをオーバーライドして、スプリッテレータのSupplier
でストリームを作成するべきです。Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)
これらの要件により、
stream()
およびparallelStream()
メソッドによって作成されたストリームは、ストリーム終端操作の開始以降、コレクションの内容を反映するようになります。- 定義:
spliterator
、インタフェースIterable<E>
- 実装要件:
- デフォルトの実装では、
Iterator
コレクションからlate-bindingスプライテータが作成されます。 このスプリッテレータは、コレクションのイテレータのフェイルファスト特性を継承します。作成された
Spliterator
はSpliterator.SIZED
を報告します。 - 実装上のノート:
- 作成された
Spliterator
はさらにSpliterator.SUBSIZED
も報告します。スプリッテレータの適用される要素がない場合は、
SIZED
およびSUBSIZED
の他に追加の特性値を報告しても、クライアントによる計算の制御、特殊化、または簡素化には役立ちません。 ただし、これによって、不変および空のスプリッテレータ・インスタンス(Spliterators.emptySpliterator()
を参照)を空のコレクションに共同利用できるようになり、そのようなスプリッテレータが適用される要素がないかどうかをクライアントが判定できるようになります。 - 戻り値:
- このコレクション内の要素に対する
Spliterator
- 導入されたバージョン:
- 1.8
-
stream
このコレクションをソースとして使用して、逐次的なStream
を返します。このメソッドは、
IMMUTABLE
、CONCURRENT
、または遅延バインディングであるスプリッテレータをspliterator()
メソッドが返せない場合にオーバーライドされるべきです。 (詳細はspliterator()
を参照。)- 実装要件:
- デフォルトの実装では、コレクションの
Spliterator
から順次Stream
を作成します。 - 戻り値:
- このコレクション内の要素に対する順次
Stream
- 導入されたバージョン:
- 1.8
-
parallelStream
このコレクションをソースとして、潜在的に並列のStream
を返します。 このメソッドは順次ストリームを返すことができます。このメソッドは、
IMMUTABLE
、CONCURRENT
、または遅延バインディングであるスプリッテレータをspliterator()
メソッドが返せない場合にオーバーライドされるべきです。 (詳細はspliterator()
を参照。)- 実装要件:
- デフォルトの実装では、コレクションの
Spliterator
から並列Stream
を作成します。 - 戻り値:
- このコレクション内の要素に対する、並列の可能性のある
Stream
- 導入されたバージョン:
- 1.8
-