キュー
データ構造のキューは、データの集合を管理するための一種のデータ構造で、先入れ先出し【FIFO:First-In, First-Out】の方式で要素を追加・削除することができます。キューは、配列と同様にデータを保持しますが、新しい要素はキューの末尾に追加され【enqueue】、要素はキューの先頭から削除されます【dequeue】。
例えば、スーパーマーケットのレジにおいて、先に来た顧客が先にレジに通過するのと同じように、最初にキューに追加された要素が最初に削除されることが保証されます。
キューは以下の用途でよく利用されるデータ構造です。
- ジョブキュー:大量のジョブを処理するシステムでは、キューが使用されます。ジョブは、キューに追加され、処理する準備ができているときに順番に実行されます。
- プリンタキュー:プリンタは、一度に1つのジョブしか処理できないため、プリンタキューが使用されます。印刷ジョブは、キューに追加され、プリンタが使用可能になったときに順番に印刷されます。
- ネットワークパケットキュー:ネットワークでは、パケットを送信する前に、送信キューに追加することが必要です。送信されるパケットは、キューに追加された順序で送信されます。
- イベントキュー:ウェブブラウザやJavaScriptランタイムなどのシステムでは、イベントキューが使用されます。イベントは、キューに追加され、順番に処理されます。これにより、イベントが競合することなく、一度に1つのイベントしか処理されないことが保証されます。
キューは、データの処理順序が重要な場合に、効果的に使用されるデータ構造の1つです。
配列を使ってキューを実装する
<サンプルプログラム>
なお、単にキューを利用するなら以下のjava.util.Queueインタフェースを使うほうが便利です。
java.util.Queueインタフェース
Javaの java.util.Queue インタフェースは、先入先出(FIFO)のデータ構造を提供するためのインタフェースです。
Java.util.Queue インタフェースで使用できる主なメソッドの一覧です。
add(E element):キューに要素を追加します。
offer(E element):キューに要素を追加します。
remove():キューから要素を取り出し、その要素を返します。
poll():キューから要素を取り出し、その要素を返しますが、キューが空の場合は null を返します。
element():キューの先頭にある要素を返しますが、その要素を削除しません。
peek():キューの先頭にある要素を返しますが、その要素を削除しません。キューが空の場合は null を返します。
キューに要素を追加する場合、Queue
インタフェースでは、add(E element)
メソッドまたは offer(E element)
メソッドを使用します。
また、キューから要素を取り出す場合、Queue
インタフェースでは、remove()
メソッドまたは poll()
メソッドを使用します。
java.util.Queue インタフェースにはenqueue() メソッドやdequeue() メソッドはありません。
<サンプルプログラム>
<出力結果>
取り出した要素: akafuku 先頭の要素: habutai 取り出した要素: habutai 先頭の要素: kiyome |
練習問題1
ユーザーに5つの整数を入力してもらい、それらをキューに追加して、キューから取り出してコンソールに出力するプログラムを作成しなさい。
<出力結果の例>
5つの整数を入力してください。 10 20 30 40 50 キューから整数を取り出して出力します。 10 20 30 40 50 |