队列用于表示对象的先进先出(FIFO)集合。当你需要项目的先进先出访问时使用。这是非通用类型的集合, 在System.Collections命名空间。根据程序的需要, 它用于创建不断增长的动态集合。在队列中, 你可以存储相同类型和不同类型的元素。通常, 当你以与存储在集合中相同的方式访问该信息时, 队列是有用的, 它是存储数据的临时存储。
下图说明了Queue类的层次结构:
重要事项:
- Queue类实现了IEnumerable, ICollection和可克隆接口。
- 当你在列表中添加项目时, 该项目称为入队.
- 当你删除项目时, 该项目称为出队.
- 队列接受null作为引用类型的有效值。
- 将元素添加到队列后, 将通过重新分配内部数组来根据需要自动增加容量。
- 在队列中, 允许你存储重复的元素。
- 队列的容量是队列可以容纳的元素数。
如何创建队列?
队列类有四个构造函数用于创建队列的方法如下:
- Queue():此构造函数用于创建Queue类的实例, 该实例为空并具有默认的初始容量, 并使用默认的增长因子。
- Queue(ICollection):此构造函数用于创建Queue类的实例, 该实例包含从指定集合中复制的元素, 具有与复制的元素数量相同的初始容量, 并使用默认的增长因子。
- Queue(Int32):此构造函数用于创建Queue类的实例, 该实例为空并具有指定的初始容量, 并使用默认的增长因子。
- Queue(Int32, Single):此构造函数用于创建Queue类的实例, 该实例为空并具有指定的初始容量, 并使用指定的增长因子。
让我们看看如何使用Queue()构造函数创建一个队列:
第1步:包括系统集合借助using关键字在程序中命名空间。
语法如下:
using System.Collections;
第2步:使用Queue类创建一个队列, 如下所示:
Queue queue_name = new Queue();
第3步:如果要在队列中添加元素, 请使用入队在队列中添加元素的方法。如下例所示。
例子:
// 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类提供了两种不同的方法来删除元素, 这些方法是:
Clear:此方法用于从队列中删除对象。
Enqueue:此方法删除队列的开始元素。
例子:
// 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类提供的以下方法轻松地找到队列的最上层元素:
Peek:此方法在队列开始处返回对象, 但不删除它。
Enqueue:此方法返回修改后的队列开始处的对象, 表示此方法删除队列的最上层元素。
例子:
// 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( "lsbin" );
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()方法检查给定元素是否存在。换句话说, 如果要搜索给定队列中的元素, 请使用Contain()方法。
例子:
// 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( "lsbin" );
my_queue.Enqueue( "geeks" );
my_queue.Enqueue( "Geeks123" );
// Checking if the element is
// present in the Queue or not
if (my_queue.Contains( "lsbin" ) == true ) {
Console.WriteLine( "Element available...!!" );
}
else {
Console.WriteLine( "Element not available...!!" );
}
}
}
输出如下:
Element available...!!
通用队列与非通用队列有什么区别?
通用队列 | 非通用队列 |
---|---|
通用队列在System.Collections.Generic命名空间下定义。 | 非通用队列在System.Collections命名空间下定义。 |
通用队列只能存储相同类型的元素。 | 非通用队列可以存储相同类型或不同类型的元素。 |
需要定义队列中元素的类型。 | 无需定义队列中元素的类型。 |
这是类型安全的。 | 它不是类型安全的。 |
更多C#开发相关内容请参考:lsbin - IT开发技术:https://www.lsbin.com/
查看以下更多C#相关的内容:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。