C# 队列(Queue)

C# 集合

C# では、Queue は先入れ先出し(FIFO, First In First Out)データ構造です。

Queue は、System.Collections または System.Collections.Generic 名前空間に属し、それぞれ非ジェネリック版とジェネリック版の実装を提供します。Queue は、エンキューされた順序でデータを処理する必要があるシナリオに適しています。

キュー(Queue)は、...を表します先进先出オブジェクトのコレクション。各項目に対して先入れ先出し方式でアクセスする必要がある場合は、キューを使用します。リストに項目を追加するときは、と呼ばれます。入队、リストから項目を削除するときは、と呼ばれます。出队。

特性

  • 先进先出:最も早くキューに追加された要素が最初に削除されます。
  • 动态大小:キューの容量は必要に応じて動的に調整されます。
  • 泛型支持:通过Queue<T>強い型付けされた要素を格納できます。
  • 线程安全:Queueそれ自体はスレッドセーフではありませんが、使用できますConcurrentQueue<T>スレッドセーフを実現します。

Queue クラスのメソッドとプロパティ

以下の表に一覧を示しますQueueクラスのいくつかの一般的な属性:

属性名称类型描述
Countintキューの要素数を取得します。
SyncRootobjectキューへのアクセスを同期するためのオブジェクトを取得します(非ジェネリック)。
IsSynchronizedboolキューへのアクセスが同期されているかどうかを示します(スレッドセーフ、常にfalse)。

以下の表に一覧を示しますQueueクラスのいくつかの一般的な方法:

方法名称返回类型描述
元素操作
Enqueue(object item)void要素をキューの末尾に追加します。
Dequeue()objectキューの先頭の要素を削除して返します。
Peek()objectキューの先頭にある要素を返しますが、削除しません。
Clear()voidキュー内のすべての要素を削除します。
検査とコピー
Contains(object item)boolある要素がキュー内に存在するかどうかを判断します。
ToArray()object[]キュー内の要素を新しい配列にコピーします。
Clone()object現在のキューのシャロー コピー(浅いコピー)を作成します。
CopyTo(Array array, int index)voidキューの要素を、指定したインデックスから既存の配列にコピーします。
枚举器支持
GetEnumerator()IEnumeratorキュー内の要素を反復処理するための列挙子を返します。
线程安全
Synchronized(Queue queue)Queueキューのスレッドセーフなラッパーを返します。

实例

以下の例は、キュー(Queue)の使用法を示しています:

实例 1

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        Queue queue = new Queue();

        // 添加元素
        queue.Enqueue("First");
        queue.Enqueue("Second");
        queue.Enqueue("Third");

        // 查看队首
        Console.WriteLine($"Peek: {queue.Peek()}"); // 输出:First

        // 移除元素
        Console.WriteLine($"Dequeue: {queue.Dequeue()}"); // 输出:First

        // 剩余元素
        foreach (var item in queue)
        {
            Console.WriteLine(item); // 输出:Second, Third
        }

        // 检查包含
        Console.WriteLine($"Contains 'Second': {queue.Contains("Second")}"); // 输出:True

        // 转数组
        object[] array = queue.ToArray();
        Console.WriteLine($"Array Length: {array.Length}"); // 输出:2
    }
}

实例 2

using System;
using System.Collections;

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

         q.Enqueue('A');
         q.Enqueue('M');
         q.Enqueue('G');
         q.Enqueue('W');
         
         Console.WriteLine("Current queue: ");
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         q.Enqueue('V');
         q.Enqueue('H');
         Console.WriteLine("Current queue: ");        
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         Console.WriteLine("Removing some values ");
         char ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         Console.ReadKey();
      }
   }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます:

Current queue: 
A M G W 
Current queue: 
A M G W V H 
Removing values
The removed value: A
The removed value: M

C# 集合

其他扩展