E
- このコレクション内に存在する要素の型public class PriorityBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
PriorityQueue
と同じ順序付けルールを使用するとともにブロッキング取得オペレーションを提供する、制限なしのブロッキング・キューです。このキューは論理的にはアンバウンド形式ですが、追加を試みてもリソース不足によりOutOfMemoryError
が発生して失敗することがあります。このクラスは、null
要素を許容しません。自然順序付けに基づく優先度キューでは、比較不可能なオブジェクトの挿入も許可されません(実行するとClassCastException
がスローされることがある)。
このクラスとそのイテレータは、Collection
およびIterator
インタフェースのオプションメソッドすべてを実装します。iterator()
メソッド内で提供されるIteratorでは、特定の順序でPriorityBlockingQueueの要素をトラバースすることは保証されません。要素をトラバースする順序を指定する必要がある場合は、Arrays.sort(pq.toArray())
の使用を考慮してください。また、drainTo
メソッドを使用して、優先順位順に一部またはすべての要素を削除して、それらを別のコレクションに配置することもできます。
このクラスのオペレーションでは、優先順位が同じ要素の順序付けについて保証がありません。順序付けを適用する必要がある場合は、カスタムのクラスまたはコンパレータを定義して、第1の優先順位値が同じ場合に順序付けするために第2のキーを使用することができます。たとえば次のクラスでは、比較可能な要素に対して要素の優先順位が同じ場合は、先入れ先出し方式の順序付けを適用します。このクラスを使用するには、通常のエントリ・オブジェクトの代わりにnew FIFOEntry(anEntry)
を挿入します。
class FIFOEntry<E extends Comparable<? super E>>
implements Comparable<FIFOEntry<E>> {
static final AtomicLong seq = new AtomicLong(0);
final long seqNum;
final E entry;
public FIFOEntry(E entry) {
seqNum = seq.getAndIncrement();
this.entry = entry;
}
public E getEntry() { return entry; }
public int compareTo(FIFOEntry<E> other) {
int res = entry.compareTo(other.entry);
if (res == 0 && other.entry != this.entry)
res = (seqNum < other.seqNum ? -1 : 1);
return res;
}
}
このクラスは、Java Collections Frameworkのメンバーです。
コンストラクタと説明 |
---|
PriorityBlockingQueue()
自然順序付けに従って要素を順序付けする、デフォルトの初期容量(11)を持つ
PriorityBlockingQueue を作成します。 |
PriorityBlockingQueue(Collection<? extends E> c)
指定されたコレクション内の要素を含む
PriorityBlockingQueue を作成します。 |
PriorityBlockingQueue(int initialCapacity)
自然順序付けに従って要素を順序付けする、指定された初期容量を持つ
PriorityBlockingQueue を作成します。 |
PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
指定されたコンパレータに従って要素を順序付けする、指定された初期容量を持つ
PriorityBlockingQueue を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
boolean |
add(E e)
指定された要素をこの優先度キューに挿入します。
|
void |
clear()
すべての要素をこのキューから原子的に削除します。
|
Comparator<? super E> |
comparator()
このキュー内の要素を順序付けするのに使うコンパレータを返します。ただし、このキューがその要素の自然順序付けを使う場合は
null を返します。 |
boolean |
contains(Object o)
指定された要素がキューに含まれている場合に
true を返します。 |
int |
drainTo(Collection<? super E> c)
このキューから利用可能なすべての要素を削除し、それらを指定されたコレクションに追加します。
|
int |
drainTo(Collection<? super E> c, int maxElements)
指定された数以内の利用可能な要素をこのキューから削除し、指定されたコレクションに追加します。
|
Iterator<E> |
iterator()
このキュー内の要素のイテレータを返します。
|
boolean |
offer(E e)
指定された要素をこの優先度キューに挿入します。
|
boolean |
offer(E e, long timeout, TimeUnit unit)
指定された要素をこの優先度キューに挿入します。
|
E |
peek()
キューの先頭を取得しますが、削除しません。キューが空の場合は
null を返します。 |
E |
poll()
キューの先頭を取得および削除します。キューが空の場合は
null を返します。 |
E |
poll(long timeout, TimeUnit unit)
このキューの先頭を取得して削除します。必要に応じて、指定された待機時間まで要素が利用可能になるのを待機します。
|
void |
put(E e)
指定された要素をこの優先度キューに挿入します。
|
int |
remainingCapacity()
PriorityBlockingQueue は容量制約を受けないため、常にInteger.MAX_VALUE を返します。 |
boolean |
remove(Object o)
指定された要素の単一のインスタンスがこのキューに存在する場合は、キューから削除します。
|
int |
size()
このコレクション中の要素の数を返します。
|
Spliterator<E> |
spliterator()
このキュー内の要素に対する
Spliterator を返します。 |
E |
take()
このキューの先頭を取得して削除します。必要に応じて、要素が利用可能になるまで待機します。
|
Object[] |
toArray()
このキューの要素がすべて含まれている配列を返します。
|
<T> T[] |
toArray(T[] a)
このキュー内のすべての要素を含む配列を返します。返される配列の実行時の型は、指定された配列の型です。
|
String |
toString()
このコレクションの文字列表現を返します。
|
addAll, element, remove
containsAll, isEmpty, removeAll, retainAll
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, stream
public PriorityBlockingQueue()
PriorityBlockingQueue
を作成します。public PriorityBlockingQueue(int initialCapacity)
PriorityBlockingQueue
を作成します。initialCapacity
- この優先度キューの初期容量IllegalArgumentException
- initialCapacity
が1より小さい場合public PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
PriorityBlockingQueue
を作成します。initialCapacity
- この優先度キューの初期容量comparator
- この優先度キューを順序付けするために使用されるコンパレータ。null
の場合、要素の自然順序付けが使用される。IllegalArgumentException
- initialCapacity
が1より小さい場合public PriorityBlockingQueue(Collection<? extends E> c)
PriorityBlockingQueue
を作成します。指定されたコレクションがSortedSet
またはPriorityQueue
である場合、この優先度キューの順序付けは、それと同じ順序付けに従って行われます。それ以外の場合、この優先度キューの順序付けは、その要素の自然順序付けに従って行われます。c
- 要素がこの優先度キューに配置されるコレクションClassCastException
- 指定されたコレクションの要素を優先度キューの順序付けに従って相互比較できない場合NullPointerException
- 指定されたコレクションまたはそのいずれかの要素がnullである場合public boolean add(E e)
add
、インタフェース: Collection<E>
add
、インタフェース: BlockingQueue<E>
add
、インタフェース: Queue<E>
add
、クラス: AbstractQueue<E>
e
- 追加する要素true
(Collection.add(E)
で指定されているとおり)ClassCastException
- 指定された要素を、優先度キューに現在存在する要素と、優先度キューの順序付けに従って比較できない場合NullPointerException
- 指定された要素がnullである場合public boolean offer(E e)
false
を返しません。offer
、インタフェース: BlockingQueue<E>
offer
、インタフェース: Queue<E>
e
- 追加する要素true
(Queue.offer(E)
で指定されているとおり)ClassCastException
- 指定された要素を、優先度キューに現在存在する要素と、優先度キューの順序付けに従って比較できない場合NullPointerException
- 指定された要素がnullである場合public void put(E e)
put
、インタフェース: BlockingQueue<E>
e
- 追加する要素ClassCastException
- 指定された要素を、優先度キューに現在存在する要素と、優先度キューの順序付けに従って比較できない場合NullPointerException
- 指定された要素がnullである場合public boolean offer(E e, long timeout, TimeUnit unit)
false
を返しません。offer
、インタフェース: BlockingQueue<E>
e
- 追加する要素timeout
- メソッドがブロックを実行することはないため、このパラメータは無視されるunit
- メソッドがブロックを実行することはないため、このパラメータは無視されるtrue
(BlockingQueue.offer
で指定されているとおり)ClassCastException
- 指定された要素を、優先度キューに現在存在する要素と、優先度キューの順序付けに従って比較できない場合NullPointerException
- 指定された要素がnullである場合public E take() throws InterruptedException
BlockingQueue
take
、インタフェース: BlockingQueue<E>
InterruptedException
- 待機中に割込みが発生した場合public E poll(long timeout, TimeUnit unit) throws InterruptedException
BlockingQueue
poll
、インタフェース: BlockingQueue<E>
timeout
- 処理を中止するまでの待機時間。単位はunit
unit
- timeout
パラメータの解釈方法を決定するTimeUnit
null
InterruptedException
- 待機中に割込みが発生した場合public Comparator<? super E> comparator()
null
を返します。null
public int size()
Collection
size
、インタフェース: Collection<E>
size
、クラス: AbstractCollection<E>
public int remainingCapacity()
PriorityBlockingQueue
は容量制約を受けないため、常にInteger.MAX_VALUE
を返します。remainingCapacity
、インタフェース: BlockingQueue<E>
Integer.MAX_VALUE
(常時)public boolean remove(Object o)
o.equals(e)
に該当する要素e
が1つ以上含まれている場合は、そのような要素を削除します。指定された要素がこのキューに含まれていた場合(つまり、呼出しの結果としてこのキューが変更された場合)にのみtrue
を返します。remove
、インタフェース: Collection<E>
remove
、インタフェース: BlockingQueue<E>
remove
、クラス: AbstractCollection<E>
o
- キューから削除される要素(その要素が存在する場合)true
public boolean contains(Object o)
true
を返します。つまり、このキュー内にo.equals(e)
のような1つ以上の要素e
が含まれている場合、true
を返します。contains
、インタフェース: Collection<E>
contains
、インタフェース: BlockingQueue<E>
contains
、クラス: AbstractCollection<E>
o
- このキューに含まれているかどうかを調べるオブジェクトtrue
public Object[] toArray()
返される配列は、それへの参照がこのキューで保持されない場合に、安全になります。(つまり、このメソッドは新しい配列を割り当てる)。このため、呼出し側は、返された配列を自由に変更できます。
このメソッドは、配列ベースのAPIとコレクションベースのAPIの間の橋渡し役として機能します。
toArray
、インタフェース: Collection<E>
toArray
、クラス: AbstractCollection<E>
public String toString()
AbstractCollection
String.valueOf(Object)
により文字列に変換されます。toString
、クラス: AbstractCollection<E>
public int drainTo(Collection<? super E> c)
BlockingQueue
c
に要素を追加しようとしたときに障害が発生すると、関連する例外のスロー時に、要素がこのキューとコレクションのいずれにも存在しない場合と、一方または両方に存在する場合があります。キューをそれ自体に排出しようとすると、IllegalArgumentException
がスローされます。また、オペレーションの進行中に指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。drainTo
、インタフェース: BlockingQueue<E>
c
- 要素の転送先のコレクションUnsupportedOperationException
- 指定されたコレクションで追加の要素がサポートされていない場合ClassCastException
- このキューの要素のクラスが原因で、その要素を指定されたコレクションに追加できない場合NullPointerException
- 指定されたコレクションがnullである場合IllegalArgumentException
- 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティが原因で指定されたコレクションに追加できない場合public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueue
c
に要素を追加しようとしたときに障害が発生すると、関連する例外のスロー時に、要素がこのキューとコレクションのいずれにも存在しない場合と、一方または両方に存在する場合があります。キューをそれ自体に排出しようとすると、IllegalArgumentException
がスローされます。また、オペレーションの進行中に指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。drainTo
、インタフェース: BlockingQueue<E>
c
- 要素の転送先のコレクションmaxElements
- 転送する要素の最大数UnsupportedOperationException
- 指定されたコレクションで追加の要素がサポートされていない場合ClassCastException
- このキューの要素のクラスが原因で、その要素を指定されたコレクションに追加できない場合NullPointerException
- 指定されたコレクションがnullである場合IllegalArgumentException
- 指定されたコレクションがこのキューである場合、またはこのキューの要素のあるプロパティが原因で指定されたコレクションに追加できない場合public void clear()
clear
、インタフェース: Collection<E>
clear
、クラス: AbstractQueue<E>
public <T> T[] toArray(T[] a)
キューが指定された配列に収まり、その配列にさらに余裕がある場合(つまり、配列がキューより多くの要素を持つ場合)、その配列内でキューの終端よりあとの要素はnull
に設定されます。
toArray()
メソッドと同じように、このメソッドは、配列ベースのAPIとコレクションベースのAPIの間の橋渡し役として機能します。さらに、このメソッドでは出力配列の実行時の型を正確に制御できるため、環境によっては割当ての手間を抑えるために使用できます。
x
が、文字列だけからなるキューであることがわかっていると仮定します。次のコードを使うと、新しく割り当てられたString
の配列にキューをダンプできます。
String[] y = x.toArray(new String[0]);
toArray(new Object[0])
は、機能の点でtoArray()
と同一です。toArray
、インタフェース: Collection<E>
toArray
、クラス: AbstractCollection<E>
T
- コレクションを含む配列の実行時の型a
- 配列が十分な大きさを持つ場合は、キューの要素が格納される配列。そうでない場合は、要素を格納するために同じ実行時の型の新しい配列が割り当てられるArrayStoreException
- 指定された配列の実行時の型が、キュー内の各要素の実行時の型のスーパー・タイプでない場合NullPointerException
- 指定された配列がnullである場合public Iterator<E> iterator()
返されるイテレータは弱一貫性を保持します。
iterator
、インタフェース: Iterable<E>
iterator
、インタフェース: Collection<E>
iterator
、クラス: AbstractCollection<E>
public Spliterator<E> spliterator()
Spliterator
を返します。
返されるスプリッテレータは弱一貫性を保持します。
Spliterator
は、Spliterator.SIZED
およびSpliterator.NONNULL
を報告します。
spliterator
、インタフェース: Iterable<E>
spliterator
、インタフェース: Collection<E>
Spliterator
は、さらにSpliterator.SUBSIZED
を報告します。Spliterator
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.