在 ArrayList 中,我們可以直接存取集合中任何一個資料項目,但有時候我們並不需要如此功能,只需要可以循序存取集合中的項目即可。 在 .Net 裡,提供了二個循序串列 (sequential list) 物件:Queue 與 Stack 。 這二個物件的特色是,可以在一個步驟中,由集合中取出資料項目,並同時將該資料項目由集合中移除。
Queue
表示先進先出 (FIFO) 集合。
- Queue.Enqueue :將物件加入 Queue 的末端。
- Queue.Dequeue :移除並傳回在 Queue 前端的物件。
- Queue.Peek :傳回 Queue 前端的物件而不需移除它。
- Queue.Clear:從 Queue 移除所有物件。 ```c# //Queue 類別的組成成員 public interface Queue : ICollection, IEnumerable, ICloneable {
public virtual int Count { get; }
public virtual Object Dequeue() //移除並傳回在 Queue 前端的物件。 public virtual void Enqueue(Object obj) //將物件加入 Queue 的末端。 public virtual Object Peek() //傳回 Queue 前端的物件而不需移除它。 }
```c#
Queue q = new Queue();
q.Enqueue("First");
q.Enqueue("Second");
q.Enqueue("Third");
q.Enqueue("Fourth");
while (q.Count > 0)
{
Console.WriteLine(q.Dequeue());
}
若要取出一個item,但不想將其移除,這時候可以利用Peek方法來解決
if (q.Peek() is String)
{
Console.WriteLine(q.Dequeue());
}
Stack
表示後進先出 (LIFO) 集合。
- Stack.Push :將物件插入 Stack 的頂端。
- Stack.Pop :移除並傳回在 Stack 頂端的物件。
- Stack.Peek :傳回 Stack 頂端的物件而不需移除它。
- Stack.Clear:從 Stack 移除所有物件。 ```c# //Stack 類別的組成成員 public class Stack : ICollection, IEnumerable, ICloneable {
public virtual int Count { get; }
public virtual Object Pop() //移除並傳回在 Stack 頂端的物件。 public virtual void Push(Object obj) //將物件插入 Stack 的頂端。 public virtual Object Peek() //傳回 Stack 頂端的物件而不需移除它。 }
```c#
Stack s = new Stack();
s.Push("First");
s.Push("Second");
s.Push("Third");
s.Push("Fourth");
while (s.Count > 0)
{
Console.WriteLine(s.Pop());
}