头图

队列用于表示对象的先进先出(FIFO)集合。当你需要项目的先进先出访问时使用。这是非通用类型的集合,System.Collections命名空间。根据程序的需要, 它用于创建不断增长的动态集合。在队列中, 你可以存储相同类型和不同类型的元素。通常, 当你以与存储在集合中相同的方式访问该信息时, 队列是有用的, 它是存储数据的临时存储。
image

下图说明了Queue类的层次结构:
image

重要事项:

  • 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#相关的内容:


一盏木人
9 声望0 粉丝