PriorityQueue
を実装Queue
していますがPriorityQueue
、FIFO データ構造は のようなものQueue
ですか?
4 に答える
いいえそうではありません。Javadocによる
優先キューの要素は、使用されるコンストラクターに応じて、自然な順序に従って、またはキューの構築時に提供されるコンパレーターによって順序付けられます。
と
このキューの先頭は、指定された順序に関して最小の要素です
キューインターフェイスから:
キューは通常、FIFO (先入れ先出し) 方式で要素を並べ替えますが、必ずしもそうとは限りません。例外の中には、提供されたコンパレーターまたは要素の自然な順序付けに従って要素を順序付けする優先キューがあります。
したがって、PriorityQueue は例外であり、コンパレータがその順序でソートする場合にのみ FIFO キューになります。
PriorityQueue は FIFO / LIFO を気にしません。優先度を処理します。同じ優先度を持つ複数のオブジェクトの場合 - FIFO LIFO の動作を当てにすることはできません。
プライオリティ キューは、要素を一貫した内部順序で保持するデータ構造です。Java 実装では、この順序は構築時に指定されます。キューの先頭と他の要素の順序は、指定した順序基準によって決まります。
たとえば、学生を含む PriorityQueue があり、設定した順序が年齢の昇順であるとします。キューの先頭には最年少の学生が含まれ、末尾には最年長の学生が含まれます。PriorityQueue に追加すると、学生は年齢に応じて正しい位置に挿入されます。指定した順序であるため、挿入の順序は関係ありません。