队列用于表示对象的先进先出(FIFO)集合。当您需要对项目进行先进先出的访问时,可以使用它。 System.Collections
命名空间中定义的集合的非通用类型。它用于根据程序的需要创建一个不断增长的动态集合。在队列中,您可以存储相同类型和不同类型的元素。通常,当您以与存储在集合中相同的方式访问该信息时,队列是有用的,它是存储数据的临时存储。
下图说明了Queue类的层次结构:
重要事项:
- Queue类实现IEnumerable , ICollection和ICloneable接口。
- 在列表中添加项目时,该项目称为enqueue 。
- 当您删除项目时,该项目称为dequeue 。
- 队列接受null作为引用类型的有效值。
- 随着元素添加到队列中,通过重新分配内部数组,容量会根据需要自动增加。
- 在队列中,允许您存储重复的元素。
- 队列的容量是队列可以容纳的元素数。
如何创建队列?
队列类具有四个用于创建队列的构造函数,如下所示:
- Queue():此构造函数用于创建Queue类的实例,该实例为空并具有默认的初始容量,并使用默认的增长因子。
- Queue(ICollection):此构造函数用于创建Queue类的实例,该实例包含从指定集合中复制的元素,具有与复制的元素数量相同的初始容量,并使用默认的增长因子。
- Queue(Int32):此构造函数用于创建Queue类的实例,该实例为空并具有指定的初始容量,并使用默认的增长因子。
- Queue(Int32,Single):此构造函数用于创建Queue类的实例,该实例为空并具有指定的初始容量,并使用指定的增长因子。
让我们看看如何使用Queue()构造函数创建一个Queue:
步骤1:借助using关键字,在程序中包含System.Collections命名空间。
句法:
using System.Collections;
步骤2:使用Queue类创建一个队列,如下所示:
Queue queue_name = new Queue();
步骤3:如果要在队列中添加元素,请使用Enqueue()方法在队列中添加元素。如下例所示。
例子:
// C# program to illustrate queue
using System;
using System.Collections;
public class GFG {
static public void Main()
{
// Create a queue
// Using Queue class
Queue my_queue = new Queue();
// Adding elements in Queue
// Using Enqueue() method
my_queue.Enqueue("GFG");
my_queue.Enqueue(1);
my_queue.Enqueue(100);
my_queue.Enqueue(null);
my_queue.Enqueue(2.4);
my_queue.Enqueue("Geeks123");
// Accessing the elements
// of my_queue Queue
// Using foreach loop
foreach(var ele in my_queue)
{
Console.WriteLine(ele);
}
}
}
输出:
GFG
1
100
2.4
Geeks123
如何从队列中删除元素?
在队列中,允许您从队列中删除元素。 Queue类提供了两种不同的方法来删除元素,这些方法是:
- 清除:此方法用于从队列中删除对象。
- 出队:此方法删除队列的开始元素。
例子:
// C# program to illustrate how // to remove elements from queue using System; using System.Collections; public class GFG { static public void Main() { // Create a queue // Using Queue class Queue my_queue = new Queue(); // Adding elements in Queue // Using Enqueue() method my_queue.Enqueue("GFG"); my_queue.Enqueue(1); my_queue.Enqueue(100); my_queue.Enqueue(2.4); my_queue.Enqueue("Geeks123"); Console.WriteLine("Total elements present in my_queue: {0}", my_queue.Count); my_queue.Dequeue(); // After Dequeue method Console.WriteLine("Total elements present in my_queue: {0}", my_queue.Count); // Remove all the elements from the queue my_queue.Clear(); // After Clear method Console.WriteLine("Total elements present in my_queue: {0}", my_queue.Count); } }
输出:Total elements present in my_queue: 5 Total elements present in my_queue: 4 Total elements present in my_queue: 0
如何获得队列的最高元素?
在Queue中,您可以使用Queue类提供的以下方法轻松地找到队列的最上层元素:
- 偷看:此方法在队列开始处返回对象,但不删除它。
- 出队:此方法返回修改后的队列开始处的对象,表示此方法删除队列的最上层元素。
例子:
// C# program to illustrate how // get topmost elements of the queue using System; using System.Collections; public class GFG { static public void Main() { // Create a queue // Using Queue class Queue my_queue = new Queue(); // Adding elements in Queue // Using Enqueue() method my_queue.Enqueue("GFG"); my_queue.Enqueue("Geeks"); my_queue.Enqueue("GeeksforGeeks"); my_queue.Enqueue("geeks"); my_queue.Enqueue("Geeks123"); Console.WriteLine("Total elements present in my_queue: {0}", my_queue.Count); // Obtain the topmost element of my_queue // Using Dequeue method Console.WriteLine("Topmost element of my_queue" + " is: {0}", my_queue.Dequeue()); Console.WriteLine("Total elements present in my_queue: {0}", my_queue.Count); // Obtain the topmost element of my_queue // Using Peek method Console.WriteLine("Topmost element of my_queue is: {0}", my_queue.Peek()); Console.WriteLine("Total elements present in my_queue: {0}", my_queue.Count); } }
输出:Total elements present in my_queue: 5 Topmost element of my_queue is: GFG Total elements present in my_queue: 4 Topmost element of my_queue is: Geeks Total elements present in my_queue: 4
如何检查队列中元素的可用性?
在Queue中,可以使用Contain()方法检查给定元素是否存在。换句话说,如果要搜索给定队列中的元素,请使用Contains()方法。
例子:
// C# program to illustrate how
// to check element present in
// the queue or not
using System;
using System.Collections;
class GFG {
static public void Main()
{
// Create a queue
// Using Queue class
Queue my_queue = new Queue();
// Adding elements in Queue
// Using Enqueue() method
my_queue.Enqueue("GFG");
my_queue.Enqueue("Geeks");
my_queue.Enqueue("GeeksforGeeks");
my_queue.Enqueue("geeks");
my_queue.Enqueue("Geeks123");
// Checking if the element is
// present in the Queue or not
if (my_queue.Contains("GeeksforGeeks") == true) {
Console.WriteLine("Element available...!!");
}
else {
Console.WriteLine("Element not available...!!");
}
}
}
输出:
Element available...!!
通用队列与非通用队列
Generic Queue | Non-Generic Queue |
---|---|
Generic queue is defined under System.Collections.Generic namespace. | Non-Generic queue is defined under System.Collections namespace. |
Generic queue can only store same type of elements. | Non-Generic queue can store same type or different types of elements. |
There is a need to define the type of the elements in the queue. | There is no need to define the type of the elements in the queue. |
It is type- safe. | It is not type-safe. |