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; Queueq1 = 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.