C# - 队列<T>
本文关键字:gt lt 队列 | 更新日期: 2023-09-12 17:39:38
Queue
是一种特殊类型的集合,它以FIFO样式(先进先出)存储元素,与Stack<T>集合完全相反。它包含元素的添加顺序。
C# 包括泛型Queue<T>
和非泛型Queue
集合。建议使用泛型Queue<T>
集合。
队列<T>特征
Queue<T>
是FIFO(先进先出)集合。- 它属于
System.Collection.Generic
命名空间。 -
Queue<T>
可以包含指定类型的元素。它提供编译时类型检查,并且不执行装箱拆箱,因为它是泛型的。 - 可以使用
Enqueue()
方法添加元素。不能使用集合初始值设定项语法。 - 可以使用
Dequeue()
和Peek()
方法检索元素。它不支持索引器。
下图说明了队列集合:
创建队列
可以通过为Queue<T>
对象可以存储的元素类型指定类型参数来创建该对象。
下面的示例使用 Enqueue()
方法在Queue<T>
中创建和添加元素。
Queue
集合允许 null(对于引用类型)和重复值。
Example: Create and Add Elements in the Queue
Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);
foreach(var id in callerIds)
Console.Write(id); //prints 1234
队列<T>属性和方法
属性 | |
---|---|
计数 | 返回队列中元素的总数。 |
Method | |
---|---|
排队(T) | 将项目添加到队列中。 |
出列 | 从队列的开头返回一个项目,并将其从队列中删除。 |
躲猫() | 返回队列中的第一项而不将其删除。 |
包含(T) | 检查项目是否在队列中 |
清除() | 从队列中删除所有项目。 |
从队列中检索元素
Dequeue()
和 Peek()
方法用于检索队列集合中的第一个元素。
Dequeue()
从队列中删除并返回第一个元素,因为队列按 FIFO 顺序存储元素。
在空队列上调用 Dequeue()
方法将引发InvalidOperation
异常。
因此,在调用队列之前,请始终检查队列的总数是否大于零。
Example: Reading Queue
Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Total elements: {0}", strQ.Count); //prints 5
while (strQ.Count > 0)
Console.WriteLine(strQ.Dequeue()); //prints Hello
Console.WriteLine("Total elements: {0}", strQ.Count); //prints 0
Peek()
方法始终返回队列集合中的第一个项,而不将其从队列中删除。
在空队列上调用 Peek()
方法将引发运行时异常InvalidOperationException
。
Example: Peek()
Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Total elements: {0}", strQ.Count); //prints 5
if(strQ.Count > 0){
Console.WriteLine(strQ.Peek()); //prints H
Console.WriteLine(strQ.Peek()); //prints H
}
Console.WriteLine("Total elements: {0}", strQ.Count); //prints 5
Contains()
Contains()
方法检查队列中是否存在项。
如果指定的项存在,则返回 true,否则返回 false。
包含() 签名:bool Contains(object obj);
Example: Contains()
Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);
callerIds.Contains(2); //true
callerIds.Contains(10); //false