C# 入門 & 実践 / C sharp

4-12. [ ジェネリック/コレクション ] 6. Queue / Stack クラスを使う。


Queue


FIFO - first in first out
オブジェクトの先入れ先出しコレクションを表します。

Stack


LIFO - last in first out
後入れ先出しコレクションです。

ひとまず単純に使ってみます。
( * マルチスレッドで、Queueを利用したりする場合は、後ほどマルチスレッドで)

    class BbNumber
    {
        private string name = "";
        private int number = 0;
        public BbNumber(string name, int number)
        {
            this.name = name;
            this.number = number;
        }
        public void Print()
        {
            Console.WriteLine("{0} : {1}",number,name);
        }
    }
    class Tester
    {
        static void Main()
        {
            Queue<BbNumber> bbq = new Queue<BbNumber>();

            // Queueへオブジェクトのインスタンスを入れていきます。
            bbq.Enqueue(new BbNumber("Rooney" , 8));
            bbq.Enqueue(new BbNumber("Saha", 10));
            bbq.Enqueue(new BbNumber("Ronaldo", 7));
            bbq.Enqueue(new BbNumber("Neville", 2));
            bbq.Enqueue(new BbNumber("Ferdinand", 5));
            bbq.Enqueue(new BbNumber("Van der Sar", 1));
            
            //
            Console.WriteLine("+++ Queue +++");
            // 何個入っているか?
            Console.WriteLine("Queue.Count : {0}", bbq.Count);

            // 一つ取り出してみます。
            BbNumber bx = bbq.Dequeue();
            // 最初に入れたものが出てきたはずです。
            bx.Print();

            // 何個入っているか?
            Console.WriteLine("Queue.Count : {0}", bbq.Count);

            // bbqが空になるまで、取り出して表示してみます。
            while (bbq.Count > 0)
            {
                bx = bbq.Dequeue();
                bx.Print();
            }

            Stack<BbNumber> bbstack = new Stack<BbNumber>();
            // Stack へオブジェクトのインスタンスを入れていきます。
            bbstack.Push(new BbNumber("Rooney", 8));
            bbstack.Push(new BbNumber("Saha", 10));
            bbstack.Push(new BbNumber("Ronaldo", 7));
            bbstack.Push(new BbNumber("Neville", 2));
            bbstack.Push(new BbNumber("Ferdinand", 5));
            bbstack.Push(new BbNumber("Van der Sar", 1));

            //
            Console.WriteLine("+++ Stack +++");
            // 何個入っているか?
            Console.WriteLine("Stack.Count : {0}", bbstack.Count);

            // 一つ取り出してみます。
            bx = bbstack.Pop();
            // 最後に入れたものが出てきたはずです。
            bx.Print();

            // 何個入っているか?
            Console.WriteLine("Stack.Count : {0}", bbstack.Count);

            // bbstackが空になるまで、取り出して表示してみます。
            while (bbstack.Count > 0)
            {
                bx = bbstack.Pop();
                bx.Print();
            }
        }
    }

+++ Queue +++
Queue.Count : 6
8 : Rooney
Queue.Count : 5
10 : Saha
7 : Ronaldo
2 : Neville
5 : Ferdinand
1 : Van der Sar
+++ Stack +++
Stack.Count : 6
1 : Van der Sar
Stack.Count : 5
5 : Ferdinand
2 : Neville
7 : Ronaldo
10 : Saha
8 : Rooney

このように
Queueを利用した場合、最初に入れたものから返ってきます。
Stackを利用した場合、最後に入れたものから返ってきます。




4-11. [ ジェネリック/コレクション ] 5. IComparable インターフェイスの実装!独自のクラスをSort! « 4. C# 入門 Level 2 » 4-13. [ ジェネリック/コレクション ] 7.Dictionary クラス


C# 入門 & 実践 / C sharp