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

クラスPriorityBlockingQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.PriorityBlockingQueue<E>
型パラメータ:
E - このキューに保持されている要素の型
すべての実装されたインタフェース:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>

public class PriorityBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
クラスPriorityQueueと同じ順序付けルールを使用するとともにブロッキング取得オペレーションを提供する、制限なしのブロッキング・キューです。 このキューは論理的にはアンバウンド形式ですが、追加を試みてもリソース不足によりOutOfMemoryErrorが発生して失敗することがあります。 このクラスは、null要素を許容しません。 自然順序付けに基づく優先度キューでは、比較不可能なオブジェクトの挿入も許可されません(実行するとClassCastExceptionがスローされることがある)。

このクラスとそのイテレータは、CollectionおよびIteratorインタフェースのオプション・メソッドすべてを実装します。 メソッドiterator()で提供されているイテレータおよびメソッドspliterator()で提供されているスプリッタは、特定の順序で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();
   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のメンバーです。

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