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

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

Phương thức Queue.Equals() trong C# được dùng để kiểm tra xem một đối tượng Queue có bằng với một đối tượng Queue khác hay không. Mặc định triển khai từ Object.Equals so sánh tham chiếu (reference equality), không so sánh nội dung.

Cú pháp

public virtual bool Equals(object obj);
  • obj: Đối tượng để so sánh.

Ví dụ 1: So sánh Queue với chính nó

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.WriteLine(queue.Equals(queue)); // True (cùng tham chiếu)
        Console.WriteLine("Số lượng = " + queue.Count);

        queue.Clear();
        Console.WriteLine("Số lượng sau Clear = " + queue.Count);
    }
}

Kết quả

True
Số lượng = 8
Số lượng sau Clear = 0

Ví dụ 2: So sánh hai Queue khác nhau nhưng cùng nội dung

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        Queue queue = new Queue();
        queue.Enqueue(100);
        queue.Enqueue(200);
        queue.Enqueue(300);
        queue.Enqueue(400);

        Queue queue2 = new Queue();
        queue2.Enqueue(100);
        queue2.Enqueue(150); // Khác ở đây
        queue2.Enqueue(300);
        queue2.Enqueue(400);

        Console.WriteLine(queue.Equals(queue2)); // False (khác tham chiếu, khác nội dung)
    }
}

Kết quả

False

So sánh nội dung (Content Equality)

Để so sánh nội dung của hai Queue, dùng LINQ SequenceEqual:

using System.Linq;

Queue q1 = new Queue(new[] { 1, 2, 3 });
Queue q2 = new Queue(new[] { 1, 2, 3 });
Queue q3 = new Queue(new[] { 1, 2, 4 });

Console.WriteLine(q1.SequenceEqual(q2)); // True
Console.WriteLine(q1.SequenceEqual(q3)); // False

Equals() trên các collection khác

Collection Equals() mặc định So sánh nội dung
Queue / Queue<T> Reference equality SequenceEqual
Stack / Stack<T> Reference equality SequenceEqual
List<T> Reference equality SequenceEqual
Dictionary<TKey,TValue> Reference equality Custom (so sánh Count + từng cặp)
Array Reference equality SequenceEqual / StructuralComparisons

Lưu ý

  • Equals() trên collection hầu như luôn là reference equality trong .NET Framework/Core.
  • Ghi đè Equals() cho struct/class tự định nghĩa nếu cần value equality.
  • queue.Equals(null) trả về false (không ném exception).
  • Dùng ReferenceEquals(q1, q2) để kiểm tra rõ ràng same instance.