队列 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 没有移除元素
}