Skip to content

队列 Queue

Queue 是一种特殊类型的集合,它以 FIFO (先进先出)的方式来存储元素,与 堆栈 Stack<T> 完全相反。 C# 包括通用 Queue<T> 和非通用 Queue 集合。 建议使用通用 Queue<T> 集合。

队列 Queue<T> 特征

  • Queue<T> 是 FIFO(先进先出)集合。
  • 它位于 System.Collection.Generic 命名空间下。
  • Queue<T> 可以包含指定类型的元素。 它提供编译时类型检查并且不执行装箱拆箱,因为它是泛型。
  • 可以使用 Enqueue() 方法添加元素。 不能使用集合初始值设定项语法。
  • 可以使用 Dequeue() 和 Peek() 方法检索元素。 它不支持索引器。

创建队列

我们可以通过指定类型参数来创建 Queue<T> 的对象。 以下示例使用 Enqueue() 方法在 Queue<T> 中创建和添加元素。 Queue 集合允许 null(对于引用类型)和重复值。

csharp
static void Main(string[] args)
{
    var myQueue = new Queue<int>();
    myQueue.Enqueue(1);
    myQueue.Enqueue(2);
    myQueue.Enqueue(3);
    myQueue.Enqueue(4);

    foreach (var id in myQueue)
        Console.Write(id); //prints 1234
}

Queue 类的方法和属性

下表列出了 Queue 类的一些常用的 属性:

属性描述
Count获取 Queue 中包含的元素个数。

下表列出了 Queue 类的一些常用的 方法:

方法名描述
void Clear();从 Queue 中移除所有的元素。
bool Contains(T item);判断某个元素是否在 Queue 中。
T Dequeue();移除并返回在 Queue 的开头的对象。
T Peek()返回在 Queue开头的对象,但不移除它。
void Enqueue(T item);向 Queue 的末尾添加一个对象。
T[] ToArray();复制 Queue 到一个新的数组中。
void TrimExcess();将容量设置为 List 中的实际元素数目(如果该数目小于某个阈值)。压缩占用的空间了

例子

csharp
static void Main(string[] args)
{
    var myQueue = new Queue<int>(2);
    myQueue.Enqueue(1);
    myQueue.Enqueue(2);
    myQueue.Enqueue(3);
    myQueue.Enqueue(4);

    var first = myQueue.Dequeue(); //1
    var has = myQueue.Contains(2); // true;
    
    foreach (var id in myQueue)
        Console.Write(id); //prints 234
    var second = myQueue.Peek(); //2 没有移除元素
}

简单就是美