共计 4303 个字符,预计需要花费 11 分钟才能阅读完成。
队列 用于示意对象的先进先出 (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# 相干的内容:
- C# 泛型编程:https://www.lsbin.com/2911.html
- C# 变量用法指南:https://www.lsbin.com/1916.html
- C# ValueTuple:https://www.lsbin.com/1129.html