Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Thuộc tính Queue.Count trong C#

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

  • Count trả về số phần tử thực tế (logical size).
  • Mỗi Enqueue() tăng Count lên 1, mỗi Dequeue() 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 == 0 trước khi Peek() hoặc Dequeue() để tránh InvalidOperationException.

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ĩaThay đổi khi
CountSố 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 (namespace System.Collections.Concurrent).