📘

Java Queueインターフェース:メモ

に公開

javaのQueueインターフェースについてのメモ。

・Java のコレクションフレームワークの一部
・「FIFO(First-In-First-Out)」 = 先入れ先出し を基本とするデータ構造
・代表的な実装クラス:LinkedList, PriorityQueue, ArrayDeque など

操作一覧

操作 例外を投げるメソッド 安全に扱えるメソッド(null / false を返す)
追加 add(e) offer(e)
削除 remove() poll()
参照(先頭を見るだけ) element() peek()
[ A ] → [ B ] → [ C ] → [ D ]
 ↑                          ↑
 先頭(pollで取り出す)     末尾(offerで追加する)

ラーメン屋の行列待ちに例えると

ラーメン屋で「先に並んだ人から順番に案内し、新しいお客さんは最後尾に並ぶ」

import java.util.LinkedList;
import java.util.Queue;

public class RamenQueue {
    public static void main(String[] args) {
        // Queue(待ち行列)を LinkedList で作成
        Queue<String> ramenQueue = new LinkedList<>();

        // お客さんが並ぶ(入店待ち)
        ramenQueue.offer("田中さん");
        ramenQueue.offer("佐藤さん");
        ramenQueue.offer("鈴木さん");

        System.out.println("現在の行列: " + ramenQueue);

        // 席に案内(先頭から順番に)
        String first = ramenQueue.poll();
        System.out.println(first + " が席に案内されました!");
        System.out.println("残りの行列: " + ramenQueue);

        // 新しいお客さんが並ぶ
        ramenQueue.offer("高橋さん");
        System.out.println("高橋さんが新しく並びました!");
        System.out.println("現在の行列: " + ramenQueue);

        // さらに案内
        while (!ramenQueue.isEmpty()) {
            String customer = ramenQueue.poll();
            System.out.println(customer + " が席に案内されました!");
        }

        System.out.println("行列は空になりました。");
    }
}

出力結果

現在の行列: [田中さん, 佐藤さん, 鈴木さん]
田中さん が席に案内されました!
残りの行列: [佐藤さん, 鈴木さん]
高橋さんが新しく並びました!
現在の行列: [佐藤さん, 鈴木さん, 高橋さん]
佐藤さん が席に案内されました!
鈴木さん が席に案内されました!
高橋さん が席に案内されました!
行列は空になりました。

Discussion