Giới thiệu
Phương thức Queue.Peek() trong C# trả về đối tượng ở đầu hàng đợi (beginning của Queue) mà không xóa nó. Queue tuân theo nguyên tắc FIFO (First In, First Out).
Cú pháp
public virtual object Peek ();
Ví dụ 1: Queue non-generic với IEnumerator
using System;
using System.Collections;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue("AB");
queue.Enqueue("BC");
queue.Enqueue("CD");
queue.Enqueue("DE");
queue.Enqueue("EF");
queue.Enqueue("FG");
queue.Enqueue("GH");
queue.Enqueue("HI");
Console.WriteLine("Queue...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext()) {
Console.WriteLine(demoEnum.Current);
}
Console.WriteLine("Phần tử ở đầu Queue = " + queue.Peek());
Console.WriteLine("Queue có đồng bộ? = " + queue.IsSynchronized);
Queue queue2 = Queue.Synchronized(queue);
Console.WriteLine("Queue bây giờ có đồng bộ? = " + queue2.IsSynchronized);
}
}
Đầu ra ví dụ 1
Queue... AB BC CD DE EF FG GH HI Phần tử ở đầu Queue = AB Queue có đồng bộ? = False Queue bây giờ có đồng bộ? = True
Ví dụ 2: Queue generic Queue<string>
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue("Gary");
queue.Enqueue("Jack");
queue.Enqueue("Ryan");
queue.Enqueue("Kevin");
queue.Enqueue("Mark");
queue.Enqueue("Jack");
queue.Enqueue("Ryan");
queue.Enqueue("Kevin");
Console.Write("Số lượng phần tử = ");
Console.WriteLine(queue.Count);
Console.WriteLine("Phần tử ở đầu Queue = " + queue.Peek());
Console.WriteLine("Queue có chứa 'Jack'? = " + queue.Contains("Jack"));
queue.Clear();
Console.Write("Số lượng phần tử (sau Clear) = ");
Console.WriteLine(queue.Count);
}
}
Đầu ra ví dụ 2
Số lượng phần tử = 8 Phần tử ở đầu Queue = Gary Queue có chứa 'Jack'? = True Số lượng phần tử (sau Clear) = 0
Lưu ý quan trọng
- Nếu Queue rỗng,
Peek()némInvalidOperationException. Luôn kiểm traCount > 0trước khi gọi. Peek()chỉ xem, không xóa. Để lấy và xóa, dùngDequeue().- Với
Queue<T>generic, trả về kiểuTthay vìobject, tránh boxing/unboxing. - Phương thức này thường dùng trong các thuật toán BFS (Breadth-First Search), xử lý tác vụ theo thứ tự đến.
So sánh Peek vs Dequeue
| Phương thức | Trả về | Xóa phần tử | Ngoại lệ khi rỗng |
|---|---|---|---|
| Peek() | Phần tử đầu | Không | InvalidOperationException |
| Dequeue() | Phần tử đầu | Có | InvalidOperationException |