关于c#:C队列Queue介绍和用法详细指南

3次阅读

共计 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
正文完
 0