C#學習之Queue分析
1、Queue定義
佇列(Queue)代表了一個先進先出的物件集合。當您需要對各項進行先進先出的訪問時,則使用佇列。當您在列表中新增一項,稱為入隊,當您從列表中移除一項時,稱為出隊。
2、優點
a、能對集合進行順序處理(先進先出)。
b、能接受null值,並且允許重複的元素。
3、 Queue的構造器
構造器函式 |
註釋 |
初始化 Queue 類的新例項,該例項為空,具有預設初始容量(32)並使用預設增長因子(2.0)。 |
|
初始化 Queue 類的新例項,該例項包含從指定集合複製的元素,具有與所複製的元素數相同的初始容量並使用預設增長因子。 |
|
初始化 Queue 類的新例項,該例項為空,具有指定的初始容量並使用預設增長因子。 |
|
初始化 Queue 類的新例項,該例項為空,具有指定的初始容量並使用指定的增長因子。 |
4、Queue的屬性
屬性名 |
註釋 |
獲取 Queue 中包含的元素數。 |
5. Queue的方法
方法名 |
註釋 |
Void Clear() |
從 Queue 中移除所有物件。 |
Bool Contains(object obj) |
確定某元素是否在 Queue 中。 |
Object Clone() |
建立 Queue 的淺表副本。 |
Void CopyTo(Array array,int index) |
從指定陣列索引開始將 Queue 元素複製到現有一維 |
移除並返回位於 Queue 開始處的物件。 |
|
Void Enqueue(object obj) |
將物件新增到 Queue 的結尾處。 |
Object Peek() |
返回位於 Queue 開始處的物件但不將其移除。 |
將 Queue 元素複製到新陣列。 |
|
將容量設定為 Queue 中元素的實際數目。 |
6、Queue的使用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
class Program { static void Main(string[] args) { //建立一個佇列 Queue myQ = new Queue(); myQ.Enqueue("The");//入隊 myQ.Enqueue("quick"); myQ.Enqueue("brown"); myQ.Enqueue("fox"); myQ.Enqueue(null);//新增null myQ.Enqueue("fox");//新增重複的元素 // 列印佇列的數量和值 Console.WriteLine("myQ"); Console.WriteLine("\tCount: {0}", myQ.Count); // 列印佇列中的所有值 Console.Write("Queue values:"); PrintValues(myQ); // 列印佇列中的第一個元素,並移除 Console.WriteLine("(Dequeue)\t{0}", myQ.Dequeue()); // 列印佇列中的所有值 Console.Write("Queue values:"); PrintValues(myQ); // 列印佇列中的第一個元素,並移除 Console.WriteLine("(Dequeue)\t{0}", myQ.Dequeue()); // 列印佇列中的所有值 Console.Write("Queue values:"); PrintValues(myQ); // 列印佇列中的第一個元素 Console.WriteLine("(Peek) \t{0}", myQ.Peek()); // 列印佇列中的所有值 Console.Write("Queue values:"); PrintValues(myQ); Console.ReadLine(); } public static void PrintValues(IEnumerable myCollection) { foreach (Object obj in myCollection) Console.Write(" {0}", obj); Console.WriteLine(); } } |
7.備註
a、Queue 的容量是 Queue 可以儲存的元素數。Queue 的預設初始容量為 32。向 Queue 新增元素時,將通過重新分配來根據需要自動增大容量。可通過呼叫 TrimToSize 來減少容量。等比因子是當需要更大容量時當前容量要乘以的數字。在構造 Queue 時確定增長因子。預設增長因子為 2.0。
b、Queue 能接受空引用作為有效值,並且允許重複的元素。
c、空引用可以作為值新增到 Queue。若要區分空值和 Queue 結尾,請檢查 Count 屬性或捕捉 Queue 為空時引發的 InvalidOperationException異常。