コレクションを利用しよう (6/6)
作成:2014-03-08 10:04
更新:2014-03-08 10:04
更新:2014-03-08 10:04
■FIFOとLIFOを実装する「Queue/Stack」
コレクションの中でもっとも多用されるのは、これまでのArray/ListとHashtable/Dictionaryあたりでしょう。が、その他にもコレクションにはクラスがあります。それは「Queue」と「Stack」です。これらは以下のような性質をもったものです。
●Queueクラス
これは「先入れ先出し(FIFO)」を実現するものです。値をどんどん入れていき、必要に応じてどんどん取り出していきます。取り出すときには、必ず「最初に入れたものから順に取り出す」ことになります。
・インスタンス作成
・値を追加する
・値を取り出す
●Stackクラス
これは「後入れ先出し(LIFO)」を実現するものです。値をどんどん入れていき、必要に応じてどんどん取り出します。取り出す際には、必ず「最後に入れたものから順に取り出す」ことになります。
・インスタンス作成
・値を追加する
・値を取り出す
これらのクラスの特徴は「保管した値を取り出すと、値は自動的に取り除かれる」という点でしょう。DequeueやPopを使って保管している値を取り出すと、もうその値はインスタンス内から消えてしまうのです。「どんどん入れて、どんどん取り出す」という、一時的に値を保管する場所という使い方をするものなのです。
下のリスト欄に、QueueとStackを作成し、その中に追加した値を順に取り出して表示するサンプルを挙げておきましょう。どちらも同じように値を追加しましたが、取り出されるのはQueueが最初から順、Stackが最後から順になっていることがわかるでしょう。
●Queueクラス
これは「先入れ先出し(FIFO)」を実現するものです。値をどんどん入れていき、必要に応じてどんどん取り出していきます。取り出すときには、必ず「最初に入れたものから順に取り出す」ことになります。
・インスタンス作成
new Queue();
new Queue( 要素数 );
new Queue( コレクション );
・値を追加する
《Queue》.Enqueue( オブジェクト );
・値を取り出す
Object 変数 = 《Queue》.Dequeue();
●Stackクラス
これは「後入れ先出し(LIFO)」を実現するものです。値をどんどん入れていき、必要に応じてどんどん取り出します。取り出す際には、必ず「最後に入れたものから順に取り出す」ことになります。
・インスタンス作成
new Stack();
new Stack( 要素数 );
new Stack( コレクション );
・値を追加する
《Stack》.Push( オブジェクト );
・値を取り出す
Object 変数 = 《Stack》.Pop();
これらのクラスの特徴は「保管した値を取り出すと、値は自動的に取り除かれる」という点でしょう。DequeueやPopを使って保管している値を取り出すと、もうその値はインスタンス内から消えてしまうのです。「どんどん入れて、どんどん取り出す」という、一時的に値を保管する場所という使い方をするものなのです。
下のリスト欄に、QueueとStackを作成し、その中に追加した値を順に取り出して表示するサンプルを挙げておきましょう。どちらも同じように値を追加しましたが、取り出されるのはQueueが最初から順、Stackが最後から順になっていることがわかるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using System; using System.Collections.Generic; namespace MyCLIApp { class Program { public static void Main(string[] args) { Queue<string> queue = new Queue<string>(); Stack<string> stack = new Stack<string>(); queue.Enqueue("One"); stack.Push("One"); queue.Enqueue("Two"); stack.Push("Two"); queue.Enqueue("Three"); stack.Push("Thre"); Console.WriteLine("Queue:"); foreach(string str in queue){ Console.Write(str + " "); } Console.WriteLine(); Console.WriteLine("Stack:"); foreach(string str in stack){ Console.Write(str + " "); } Console.ReadKey(true); } } }
※関連コンテンツ