C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のQueueクラスとは?FIFOコレクションの基本と主要メソッドを解説

C#で先入れ先出し(FIFO:First-In First-Out)方式のコレクションを扱うには、Queueクラスを使用します。FIFOとは、最初に追加した要素が最初に取り出されるという仕組みで、タスク管理や処理の順番待ちなどに適したデータ構造です。

キューに要素を追加する操作を「エンキュー(Enqueue)」、キューから要素を取り出す操作を「デキュー(Dequeue)」と呼びます。

Queueクラスの主なメソッド

No.メソッドと説明
1public virtual void Clear();
キューからすべての要素を削除します。
2public virtual bool Contains(object obj);
指定した要素がキュー内に存在するかどうかを判定します。
3public virtual object Dequeue();
キューの先頭にあるオブジェクトを削除し、そのオブジェクトを返します。
4public virtual void Enqueue(object obj);
キューの末尾にオブジェクトを追加します。
5public virtual object[] ToArray();
キューの内容を新しい配列にコピーします。

それでは、Queueクラスにおけるエンキューとデキューの実際の使い方を、サンプルコードで確認してみましょう。

サンプルコード

using System;
using System.Collections;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            Queue q = new Queue();

            // 要素を追加(エンキュー)
            q.Enqueue('A');
            q.Enqueue('B');
            q.Enqueue('C');
            q.Enqueue('D');

            Console.WriteLine("現在のキュー:");
            foreach (char c in q) Console.Write(c + " ");
            Console.WriteLine();

            // さらに要素を追加
            q.Enqueue('E');
            q.Enqueue('F');
            q.Enqueue('G');
            q.Enqueue('H');

            Console.WriteLine("現在のキュー:");
            foreach (char c in q) Console.Write(c + " ");
            Console.WriteLine();

            // 要素を取り出す(デキュー)
            Console.WriteLine("いくつかの値を削除します");
            char ch = (char)q.Dequeue();
            Console.WriteLine("削除された値: {0}", ch);

            ch = (char)q.Dequeue();
            Console.WriteLine("削除された値: {0}", ch);

            Console.ReadKey();
        }
    }
}

実行結果

現在のキュー:
A B C D
現在のキュー:
A B C D E F G H
いくつかの値を削除します
削除された値: A
削除された値: B

コードの解説

まず、Enqueueメソッドを使ってキューに要素を追加しています。追加した順番どおりに A、B、C、D が格納されます。

Queue q = new Queue();
q.Enqueue('A');
q.Enqueue('B');
q.Enqueue('C');
q.Enqueue('D');

次に、Dequeueメソッドを使うと、キューの先頭(最初に追加した要素)から順に取り出されます。実行結果を見ると、最初に追加した「A」「B」の順番で削除されていることがわかります。これがFIFO(先入れ先出し)の動作です。

char ch = (char)q.Dequeue();
Console.WriteLine("削除された値: {0}", ch);

補足:ジェネリック版のQueue<T>について

上記の例では非ジェネリックな System.Collections.Queue を使用していますが、現代のC#では型安全な System.Collections.Generic.Queue<T> の使用が推奨されています。Queue<char> のように型を指定すれば、ボックス化・アンボックス化のオーバーヘッドがなくなり、キャストも不要になるため、パフォーマンスと可読性の両面でメリットがあります。

  1. C#のクラスとは?定義方法と基本構造を初心者向けに解説

    C#におけるクラスの基本的な考え方C#において、クラス(class)とは、あるデータ型の設計図(ブループリント)を定義するものです。クラスをもとにして実際に生成されたデータの実体をオブジェクト(object)と呼び、これをクラスの「インスタンス」といいます。また、クラスを構成するメソッドや変数は、まとめてクラスのメンバー(members)と呼ばれます。クラスを理解することは、オブジェクト指向プログラミングを学ぶ上で最も重要な第一歩となります。クラス定義の一般的な書式クラスの定義は、キーワード class から始まり、その後にクラス名を記述します。そして、波括弧 { } で囲まれた部分がクラスの

  2. C#のQueueクラスにおけるCountプロパティの使い方を解説

    C#のQueueクラスには、キューに格納されている要素の数を取得するためのCountプロパティが用意されています。Countプロパティは読み取り専用で、現在キューに含まれる要素数をint型の値として返します。 Queueへの要素の追加方法 Queueに要素を追加するには、Enqueueメソッドを使用します。以下のようにインスタンスを作成し、要素を順番に追加していきます。 Queue q = new Queue(); q.Enqueue(1); q.Enqueue(2); q.Enqueue(3); q.Enqueue(4); Countプロパティで要素数を取得する 要素を追加した後、C