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

Phương thức Queue.Peek() trong C#

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ém InvalidOperationException. Luôn kiểm tra Count > 0 trước khi gọi.
  • Peek() chỉ xem, không xóa. Để lấy và xóa, dùng Dequeue().
  • Với Queue<T> generic, trả về kiểu T thay 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ứcTrả vềXóa phần tửNgoại lệ khi rỗng
Peek()Phần tử đầuKhôngInvalidOperationException
Dequeue()Phần tử đầuCóInvalidOperationException