Giới thiệu
Thuộc tính Queue.Count trong C# trả về số lượng phần tử đang chứa trong Queue. Đây là thuộc tính chỉ đọc (get-only).
Cú pháp
public virtual int Count { get; }
Ví dụ 1: Queue<int> với Clear
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
queue.Enqueue(400);
queue.Enqueue(500);
queue.Enqueue(600);
queue.Enqueue(700);
queue.Enqueue(800);
queue.Enqueue(900);
queue.Enqueue(1000);
Console.WriteLine("Queue...");
foreach(int item in queue) {
Console.WriteLine(item);
}
Console.WriteLine("Số lượng phần tử trong Queue = " + queue.Count);
queue.Clear();
Console.WriteLine("Số lượng phần tử trong Queue [Sau Clear] = " + queue.Count);
}
}
Đầu ra ví dụ 1
Queue... 100 200 300 400 500 600 700 800 900 1000 Số lượng phần tử trong Queue = 10 Số lượng phần tử trong Queue [Sau Clear] = 0
Ví dụ 2: Thêm phần tử và Clear
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
Console.WriteLine("Queue...");
foreach(int item in queue) {
Console.WriteLine(item);
}
Console.WriteLine("Số lượng phần tử trong Queue = " + queue.Count);
queue.Enqueue(800);
queue.Enqueue(900);
queue.Enqueue(1000);
Console.WriteLine("Số lượng phần tử trong Queue [Đã cập nhật] = " + queue.Count);
queue.Clear();
Console.WriteLine("Số lượng phần tử trong Queue [Sau Clear] = " + queue.Count);
}
}
Đầu ra ví dụ 2
Queue... 100 200 300 Số lượng phần tử trong Queue = 3 Số lượng phần tử trong Queue [Đã cập nhật] = 6 Số lượng phần tử trong Queue [Sau Clear] = 0
Đặc điểm quan trọng
Counttrả về số phần tử thực tế (logical size).- Mỗi
Enqueue()tăng Count lên 1, mỗiDequeue()giảm Count đi 1. Clear()đặt Count = 0.- Độ phức tạp: O(1) - chỉ đọc biến nội bộ.
- Kiểm tra
Count == 0trước khiPeek()hoặcDequeue()để tránhInvalidOperationException.
Count vs Capacity (Queue non-generic)
Lớp System.Collections.Queue non-generic có thuộc tính Capacity (dung lượng mảng nội bộ). Queue<T> generic không public Capacity.
| Thuộc tính | Ý nghĩa | Thay đổi khi |
|---|---|---|
| Count | Số phần tử thực tế | Enqueue, Dequeue, Clear |
| Capacity (non-generic) | Dung lượng mảng nội bộ | Tự động tăng khi Enqueue vượt quá Capacity (thường gấp đôi) |
Ứng dụng thực tế
- Kiểm tra queue rỗng:
if (queue.Count > 0). - Giới hạn kích thước queue (bounded queue):
if (queue.Count >= MAX) wait.... - Monitoring: báo cáo độ dài hàng đợi, throughput, latency.
- Load balancing: phân phối request dựa trên Count của các worker queue.
Queue<T> vs ConcurrentQueue<T>
Queue<T>: không thread-safe, hiệu năng cao, dùng single-thread.ConcurrentQueue<T>: thread-safe, lock-free, dùng multi-thread (namespaceSystem.Collections.Concurrent).