Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Queue<T> / Stack<T>
先入れ先出し(FIFO)のコレクション『Queue<T>』と、後入れ先出し(LIFO)のコレクション『Stack<T>』です。
構文
// キュー(先入れ先出し)を作成します。 Queue<T> キュー = new Queue<T>(); // スタック(後入れ先出し)を作成します。 Stack<T> スタック = new Stack<T>();
メソッド一覧
| メソッド | Queue / Stack | 概要 |
|---|---|---|
| Enqueue(item) | Queue | 末尾に要素を追加します。 |
| Dequeue() | Queue | 先頭の要素を取り出して削除します。空の場合は例外が発生します。 |
| Peek() | Queue / Stack | 先頭(または先端)の要素を削除せずに参照します。 |
| Push(item) | Stack | 先端に要素を追加します。 |
| Pop() | Stack | 先端の要素を取り出して削除します。空の場合は例外が発生します。 |
| TryDequeue(out T) | Queue | 取り出しを試みて、空なら false を返します(例外なし)。 |
| TryPop(out T) | Stack | 取り出しを試みて、空なら false を返します(例外なし)。 |
| Count | Queue / Stack | 要素数を返します。 |
サンプルコード
using System;
using System.Collections.Generic;
// Queue(先入れ先出し)の例です。
Queue<string> 待ち行列 = new Queue<string>();
待ち行列.Enqueue("田中");
待ち行列.Enqueue("山田");
待ち行列.Enqueue("佐藤");
Console.WriteLine($"先頭: {待ち行列.Peek()}"); // 田中(削除しない)
while (待ち行列.Count > 0) {
string 次の人 = 待ち行列.Dequeue();
Console.WriteLine($"処理中: {次の人}");
}
// Stack(後入れ先出し)の例です。
Stack<string> 操作履歴 = new Stack<string>();
操作履歴.Push("テキスト入力");
操作履歴.Push("文字色変更");
操作履歴.Push("フォント変更");
// 「元に戻す」機能のイメージです。
Console.WriteLine("元に戻す:");
while (操作履歴.Count > 0) {
Console.WriteLine($" 取り消し: {操作履歴.Pop()}");
}
// TryDequeue / TryPop で安全に取り出します。
Queue<int> タスク = new Queue<int>();
if (タスク.TryDequeue(out int 値)) {
Console.WriteLine($"取得: {値}");
} else {
Console.WriteLine("キューが空です。");
}
概要
『Queue<T>』は受付・印刷ジョブ・メッセージキューなど「先に入れたものを先に処理する」用途に適しています。『Stack<T>』はエディタの「元に戻す(Undo)」機能・ブラウザの戻るボタン・式の解析など「直近の操作を逆順に処理する」用途に使われます。
空のコレクションに対して『Dequeue()』や『Pop()』を呼ぶと例外が発生します。安全に取り出すには『TryDequeue()』『TryPop()』を使用してください。
重複なしのコレクションは『HashSet<T>』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。