Phương thức Queue<T>.Enqueue() trong C# được dùng để thêm một đối tượng vào cuối hàng đợi (rear của Queue). Queue tuân theo nguyên tắc FIFO (First-In-First-Out).
Cú pháp
public void Enqueue(T item);
item: Phần tử cần thêm vào hàng đợi. Có thể lànullcho reference type.
Ví dụ 1: Enqueue, Dequeue, Count, Clear
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"); // Cho phép trùng lặp
queue.Enqueue("Ryan");
queue.Enqueue("Kevin");
Console.WriteLine("Số lượng phần tử = " + queue.Count);
Console.WriteLine("Queue...");
foreach (string s in queue)
{
Console.WriteLine(s);
}
// Dequeue lấy và xóa phần tử đầu
queue.Dequeue();
queue.Dequeue();
Console.WriteLine("\nQueue sau 2 Dequeue...");
foreach (string s in queue)
{
Console.WriteLine(s);
}
Console.WriteLine("Số lượng (cập nhật) = " + queue.Count);
queue.Clear();
Console.WriteLine("\nSố lượng sau Clear = " + queue.Count);
}
}
Kết quả
Số lượng phần tử = 8 Queue... Gary Jack Ryan Kevin Mark Jack Ryan Kevin Queue sau 2 Dequeue... Ryan Kevin Mark Jack Ryan Kevin Số lượng (cập nhật) = 6 Số lượng sau Clear = 0
Ví dụ 2: Enqueue thêm, Dequeue, Clear lần lượt
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");
Console.WriteLine("Queue...");
foreach (string s in queue) Console.WriteLine(s);
Console.WriteLine("Số lượng = " + queue.Count);
// Thêm thêm
queue.Enqueue("Jack");
queue.Enqueue("Ryan");
queue.Enqueue("Kevin");
Console.WriteLine("\nQueue sau Enqueue thêm...");
foreach (string s in queue) Console.WriteLine(s);
Console.WriteLine("Số lượng (cập nhật) = " + queue.Count);
queue.Dequeue();
queue.Dequeue();
Console.WriteLine("\nQueue sau 2 Dequeue...");
foreach (string s in queue) Console.WriteLine(s);
Console.WriteLine("Số lượng = " + queue.Count);
queue.Clear();
Console.WriteLine("\nSố lượng sau Clear = " + queue.Count);
}
}
Kết quả
Queue... Gary Jack Ryan Kevin Mark Số lượng = 5 Queue sau Enqueue thêm... Gary Jack Ryan Kevin Mark Jack Ryan Kevin Số lượng (cập nhật) = 8 Queue sau 2 Dequeue... Ryan Kevin Mark Jack Ryan Kevin Số lượng = 6 Số lượng sau Clear = 0
Các phương thức chính của Queue<T>
| Phương thức | Mô tả | Phức độ |
|---|---|---|
Enqueue(T) |
Thêm vào cuối | O(1) trung bình |
Dequeue() |
Lấy và xóa phần tử đầu | O(1) |
Peek() |
Xem phần tử đầu (không xóa) | O(1) |
Contains(T) |
Kiểm tra tồn tại | O(n) |
Clear() |
Xóa tất cả | O(n) |
ToArray() |
Sao chép sang mảng | O(n) |
TrimExcess() |
Giảm capacity nếu Count < 90% | O(n) |
Lưu ý
- Queue cho phép phần tử trùng lặp và null (reference type).
Dequeue()némInvalidOperationExceptionnếu Queue rỗng. DùngTryDequeue(ConcurrentQueue) hoặc kiểm traCount > 0trước.- Không thread-safe. Dùng
ConcurrentQueue<T>cho đa luồng. - Capacity tự động mở rộng (gấp đôi) khi cần.
TrimExcess()thu nhỏ nếu Count nhỏ hơn 90% Capacity.