Hàng đợi là một tập hợp trong đó có thứ tự vào trước và ra trước (FIFO). Tương tự như là những người mua vé tàu, họ xếp thành một hàng, người nào vào trước thì sẽ mua trước và ra trước. Hàng đợi là kiểu dữ liệu tốt để quản lý những nguồn tài nguyên giới hạn. Ví dụ, chúng ta muốn gởi thông điệp đến một tài nguyên mà chỉ xử lý được duy nhất một thông điệp một lần. Khi đó chúng ta sẽ thiết lập một hàng đợi thông điệp để xử lý các thông điệp theo thứ tự đưa vào. Lớp Queue thể hiện kiểu dữ liệu như trên, trong bảng sau liệt kê những phương thức và thuộc tính thành viên.
Chúng ta có thể thêm những thành phần vào trong hàng đợi với phương thức Enqueue và sau đó lấy chúng ra khỏi hàng đợi với Dequeue hay bằng sử dụng enumerator.
Ví dụ sau minh họa việc sử dụng hàng đợi.
Ví dụ 18: Làm việc với hàng đợi.
namespace Programming_CSharp {
using System.Collections; public class Tester
{
public static void Main() {
Queue intQueue = new Queue(); // đưa vào trong mảng
for(int i=0; i <5; i++) { intQueue.Enqueue(i*5); } // hiện thị hàng đợi Console.Write(“intQueue values:\t”); PrintValues( intQueue);
// xóa thành phần ra khỏi hàng đợi
Console.WriteLine(“\nDequeue\t{0}”, intQueue.Dequeue()); // hiển thị hàng đợi
Console.Write(“intQueue values:\t”); PrintValues(intQueue);
// xóa thành phần khỏi hàng đợi
Console.WriteLine(“\nDequeue\t{0}”, intQueue.Dequeue()); // hiển thị hàng đợi
Console.Write(“intQueue values:\t”); PrintValues(intQueue);
// Xem thành phần đầu tiên trong hàng đợi.
Console.WriteLine(“\nPeek \t{0}”, intQueue.Peek()); // hiển thị hàng đợi
Console.Write(“intQueue values:\t”); PrintValues(intQueue);
}
public static void PrintValues(IEnumerable myCollection) {
IEnumerator myEnumerator = myCollection.GetEnumerator(); while (myEnumerator.MoveNext())
Console.Write(“{0} ”, myEnumerator.Current); Console.WriteLine(); } } } Kết quả: intQueue values: 0 5 10 15 20 Dequeue 0 intQueue values: 5 10 15 20 Dequeue 5 intQueue values: 10 15 20 Peek 10 intQueue values: 10 15 20
Một điểm lưu ý là lớp Queue là một lớp có thể đếm được enumerable nên ta có thể truyền vào phương thức PrintValues với kiểu tham số khai báo IEnumerable. Việc chuyển đổi này là ngầm định. Trong phương thức PrintValues ta gọi phương thức GetEnumerator, nên nhớ rằng đây là phương thức đơn của tất cả những lớp IEnumerable. Kết quả là một đối tượng Enumerator được trả về, do đó chúng ta có thể sử dụng chúng để liệt kê tất cả những đối tượng có trong tập hợp.