C# Queue(隊列)

Queue是一種特殊的集合類型,它以FIFO方式(先進(jìn)先出)存儲元素,與Stack <T>集合完全相反。它按添加順序包含元素。C#包括泛型Queue<T>和非泛型Queue集合。建議使用泛型Queue<T>集合。

Queue <T>特性

  • Queue<T> 是FIFO(先進(jìn)先出)集合。  

  • 它在System.Collection.Generic命名空間下。

  • Queue<T>可以包含指定類型的元素。它提供編譯時類型檢查,并且不執(zhí)行裝箱/拆箱,因為它是泛型的。

  • 可以使用Enqueue()方法添加元素。無法使用集合初始化(collection-initializer)語法。

  • 可以使用Dequeue() 和 Peek()方法檢索元素。它不支持索引器。

下圖說明了Queue集合:

C#隊列

創(chuàng)建隊列

您可以通過為 Queue<T> 其存儲的元素類型指定類型參數(shù)來創(chuàng)建的對象。下面的示例使用 Enqueue ()方法在 Queue <T> 中創(chuàng)建和添加元素。Queue 集合允許 null (用于引用類型)和重復(fù)值。

Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);

foreach(var id in callerIds)
    Console.Write(id); //打印1234

Queue <T>屬性和方法

屬性用法
Count返回隊列中元素的總數(shù)。
方法用法
Enqueue(T)將項目添加到隊列中。
Dequeue從隊列的開頭返回一個項目,并將其從隊列中刪除。
Peek(T)從隊列中返回第一個項目而不將其刪除。
Contains(T)檢查項目是否在隊列中
Clear()從隊列中刪除所有項目。

從隊列中檢索元素

Dequeue()和Peek()方法用于檢索在隊列集合中的第一個元素。Dequeue()移除并返回一個隊列中的第一個元素,因為在FIFO的順序隊列存儲元素。在空隊列上調(diào)用 Dequeue() 方法將引發(fā)InvalidOperation異常。因此,在調(diào)用隊列之前,請始終檢查隊列的總數(shù)是否大于零。

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");

Console.WriteLine("元素總數(shù): {0}", strQ.Count); //輸出 5

while (strQ.Count > 0){
    Console.WriteLine(strQ.Dequeue()); //輸出 Hello
}


Console.WriteLine("元素總數(shù): {0}", strQ.Count); //輸出 0

Peek()方法始終從隊列集合中返回第一項,而不會將其從隊列中刪除。Peek()在空隊列上調(diào)用該方法將引發(fā)運行時異常 InvalidOperationException。

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");

Console.WriteLine("元素總數(shù): {0}", strQ.Count); //輸出 5

if(strQ.Count > 0){
    Console.WriteLine(strQ.Peek()); //輸出 H
    Console.WriteLine(strQ.Peek()); //輸出 H
}

Console.WriteLine("元素總數(shù): {0}", strQ.Count); //輸出 0

Contains()

Contains()方法檢查隊列中是否存在項目。如果指定的項目存在,則返回true,否則返回false。

Contains() 簽名:

 bool Contains(object obj);
Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);

callerIds.Contains(2); //true
callerIds.Contains(10); //false
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清