キュー(Queue)とデキュー(Deque)
020-004 - キュー(Queue)とデキュー(Deque)
QueueはFIFO(先入れ先出し)のデータ構造で、順序付き処理に使用されます。LinkedListはQueueインターフェイスを実装し、両端での操作が可能です。PriorityQueueは優先度順に要素を取り出します。Dequeは両端での追加・削除が可能な双方向キューで、スタックとしても使用できます。ArrayDequeはDequeの高速な実装です。Dequeを使うことでスタックとキューの両方の機能が統一的に扱えます。offer()、poll()、peek()などの基本操作を理解することが重要です。
QueueとDequeの理解は、順序制御が重要な処理の実装に不可欠です。待ち行列の実装、タスクスケジューリング、幅優先探索など、多様な用途で活用できます。実務では、メッセージキュー、ジョブキュー、イベント処理などで使用されます。たとえば、印刷ジョブをPriorityQueueで管理し、優先度の高いジョブから処理することができます。
この項目を学ぶことで、順序制御を伴うデータ処理が実装でき、アルゴリズムとデータ構造の実践力が向上します。キューの概念が実装として身につきます。前提知識として、Listとコレクションの基本を理解している必要があります。
問題 (12)
Map応用:単語の出現頻度カウント
<p><strong>この問題では</strong>: 単語のリストを入力として受け取り、<code>HashMap.merge()</code>で各単語の出現頻度をカウントし、頻度の降順(同数の場合...
Mapの基本:キーと値のペア管理
<p><strong>この問題では</strong>: <code>HashMap<String, Integer></code>を使ってキーと値のペアを登録・取得し、キーの存在確認を行い...
Deque:回文チェッカー
# Deque:回文チェッカー **この問題では**: 文字列の各文字をDequeに格納し、前後両端から1文字ずつ取り出して比較することで回文判定を行い、結果を標準出力に表示するプログラムを作成しま...
デキュー管理:タスクキュー
# デキュー管理:タスクキュー **この問題では**: `ArrayDeque`を使ってタスクキューを管理し、先頭・末尾への追加と先頭からの取り出し操作を行い、結果を標準出力に表示するプログラムを作...
キュー管理:順番待ちシステム
# キュー管理:順番待ちシステム **この問題では**: `Queue<String>`を使って顧客の順番待ちリストをFIFO(先入れ先出し)順で管理し、待機中の顧客一覧と案内順序を標準出力に表示す...
コレクション:Iteratorで要素を巡回
# <a href="https://javadrill.tech/problems/020">コレクション</a>:Iteratorで要素を巡回 **この問題では**: `Iterator`を使用...
LinkedListをキューとして使う
# LinkedListをキューとして使う **この問題では**: 3つのタスク名を引数として受け取り、`LinkedList`を`Queue`として使ってFIFO順に処理し、結果を文字列として返す...
ArrayDequeでスタックとキューを切り替える
# ArrayDequeでスタックとキューを切り替える **この問題では**: カンマ区切りの要素文字列を受け取り、`ArrayDeque`を使ってスタック(LIFO)またはキュー(FIFO)の順序...
ArrayDequeによるタスクキュー管理
# ArrayDequeによるタスクキュー管理 **この問題では**: `ArrayDeque<String>`をFIFO(先入れ先出し)キューとして使用し、タスクの追加・順次処理(poll)・処理...
Queueの基本操作
# Queueの基本操作 **この問題では**: `LinkedList` を `Queue` インターフェイスとして使い、`offer`/`poll`/`peek` の基本操作を行うプログラムを作...
PriorityQueueでカスタム優先度
# PriorityQueueでカスタム優先度 **この問題では**: `PriorityQueue` にカスタム `Comparator` を設定し、タスクを優先度順に処理するプログラムを作成しま...
ArrayDequeをスタックとして使用
# ArrayDequeをスタックとして使用 **この問題では**: `ArrayDeque` を `push`/`pop`/`peek` でスタック(LIFO)として使用し、操作結果を標準出力に表...
