Giới thiệu
Phương thức Queue.Dequeue() trong C# xóa và trả về đối tượng ở đầu (beginning) của Queue. Queue tuân theo nguyên tắc FIFO (First In, First Out).
Cú pháp
public virtual object Dequeue ();
Ví dụ 1: Dequeue cơ bản với Queue<string>
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue("A");
queue.Enqueue("B");
queue.Enqueue("C");
queue.Enqueue("D");
queue.Enqueue("E");
queue.Enqueue("F");
queue.Enqueue("G");
Console.WriteLine("Số lượng phần tử = " + queue.Count);
Console.WriteLine("Phần tử ở đầu queue = " + queue.Peek());
queue.Dequeue(); // Xóa A
queue.Dequeue(); // Xóa B
queue.Dequeue(); // Xóa C
Console.WriteLine("Số lượng phần tử (sau 3 Dequeue) = " + queue.Count);
}
}
Đầu ra ví dụ 1
Số lượng phần tử = 7 Phần tử ở đầu queue = A Số lượng phần tử (sau 3 Dequeue) = 4
Ví dụ 2: Dequeue với Clear và duyệt queue
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("Queue...");
foreach(string item in queue) {
Console.WriteLine(item);
}
queue.Dequeue(); // Xóa Gary
queue.Dequeue(); // Xóa Jack
Console.WriteLine("\nQueue...ĐÃ CẬP NHẬT");
foreach(string item in queue) {
Console.WriteLine(item);
}
Console.Write("Số lượng phần tử (đã cập nhật) = " + queue.Count);
queue.Clear();
Console.Write("\nSố lượng phần tử (sau Clear) = ");
Console.WriteLine(queue.Count);
}
}
Đầu ra ví dụ 2
Số lượng phần tử = 8 Queue... Gary Jack Ryan Kevin Mark Jack Ryan Kevin Queue...ĐÃ CẬP NHẬT Ryan Kevin Mark Jack Ryan Kevin Số lượng phần tử (đã cập nhật) = 6 Số lượng phần tử (sau Clear) = 0
Lưu ý quan trọng
- Nếu Queue rỗng,
Dequeue()némInvalidOperationException. Luôn kiểm traCount > 0trước. Dequeue()trả vềobject(non-generic) hoặcT(genericQueue<T>).- Khác với
Peek()chỉ xem,Dequeue()xóa phần tử khỏi queue. - Độ phức tạp thời gian: O(1) amortized.
So sánh Peek vs Dequeue vs Enqueue
| Phương thức | Mô tả | Thay đổi Count | Trả về |
|---|---|---|---|
| Enqueue(item) | Thêm item vào cuối | +1 | void |
| Peek() | Xem item ở đầu | 0 | item |
| Dequeue() | Lấy và xóa item ở đầu | -1 | item |
Ứng dụng thực tế
- Xử lý tác vụ theo thứ tự đến (task scheduling, message queue).
- Thuật toán BFS (Breadth-First Search) duyệt đồ thị/cây.
- Buffer luồng dữ liệu (stream buffering, producer-consumer).
- Rate limiting, request throttling.
- Trong .NET hiện đại, ưu tiên
Queue<T>generic hoặcConcurrentQueue<T>cho thread-safe.
Queue non-generic vs generic
System.Collections.Queue: lưuobject, boxing/unboxing cho value type.System.Collections.Generic.Queue<T>: type-safe, hiệu năng tốt hơn, khuyến nghị dùng.