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