LinkedList<T> ক্লাসের Equals(object obj) মেথড ব্যবহার করে দুটি LinkedList অবজেক্ট সমান কিনা তা যাচাই করা যায়। গুরুত্বপূর্ণ: LinkedList ক্লাস Equals মেথড ওভাররাইড করে না, তাই এটি রেফারেন্স সমতা চেক করে (সামান্য Object.Equals-এর মতো)। দুটি আলাদা LinkedList অবজেক্ট একই কন্টেন্ট থাকলেও সমান নয়।
উদাহরণ ১: একই রেফারেন্স (সমান)
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(string[] args) {
LinkedList<string> list1 = new LinkedList<string>();
list1.AddLast("One");
list1.AddLast("Two");
list1.AddLast("Three");
list1.AddLast("Four");
list1.AddLast("Five");
Console.WriteLine("LinkedList1 উপাদানসমূহ...");
foreach (string res in list1) {
Console.WriteLine(res);
}
LinkedList<string> list2 = new LinkedList<string>();
list2.AddLast("India");
list2.AddLast("US");
list2.AddLast("UK");
list2.AddLast("Canada");
list2.AddLast("Poland");
list2.AddLast("Netherlands");
Console.WriteLine("\nLinkedList2 উপাদানসমূহ...");
foreach (string res in list2) {
Console.WriteLine(res);
}
// list3 = list2 (রেফারেন্স কপি - সেম অবজেক্ট)
LinkedList<string> list3 = new LinkedList<string>();
list3 = list2;
Console.WriteLine("\nLinkedList3 == LinkedList2? = " + list3.Equals(list2)); // True (সেম রেফারেন্স)
}
}
আউটপুট
LinkedList1 উপাদানসমূহ... One Two Three Four Five LinkedList2 উপাদানসমূহ... India US UK Canada Poland Netherlands LinkedList3 == LinkedList2? = True
উদাহরণ ২: আলাদা অবজেক্ট, একই কন্টেন্ট (অসমান - রেফারেন্স কম্পারিজন)
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(string[] args) {
LinkedList<string> list1 = new LinkedList<string>();
list1.AddLast("One");
list1.AddLast("Two");
list1.AddLast("Three");
list1.AddLast("Four");
list1.AddLast("Five");
Console.WriteLine("LinkedList1 উপাদানসমূহ...");
foreach (string res in list1) {
Console.WriteLine(res);
}
LinkedList<string> list2 = new LinkedList<string>();
list2.AddLast("India");
list2.AddLast("US");
list2.AddLast("UK");
list2.AddLast("Canada");
list2.AddLast("Poland");
list2.AddLast("Netherlands");
Console.WriteLine("\nLinkedList2 উপাদানসমূহ...");
foreach (string res in list2) {
Console.WriteLine(res);
}
// আলাদা অবজেক্ট, Equals() কল
Console.WriteLine("\nLinkedList2 == LinkedList1? = " + list2.Equals(list1)); // False (আলাদা রেফারেন্স)
}
}
আউটপুট
LinkedList1 উপাদানসমূহ... One Two Three Four Five LinkedList2 উপাদানসমূহ... India US UK Canada Poland Netherlands LinkedList2 == LinkedList1? = False
⚠️ গুরুত্বপূর্ণ: LinkedList.Equals() আচরণ
LinkedList<T> ক্লাস Equals মেথড ওভাররাইড করে না। ফলে এটি বেস Object.Equals ব্যবহার করে যা রেফারেন্স সমতা চেক করে। অর্থাৎ:
list1.Equals(list2)→trueশুধু যদিlist1এবংlist2একই অবজেক্ট রেফার করে।list1.Equals(list1)→truelist1.Equals(null)→false
সঠিক পদ্ধতি: LinkedList কন্টেন্ট তুলনা
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo {
public static void Main() {
var list1 = new LinkedList<int>(new[] { 1, 2, 3 });
var list2 = new LinkedList<int>(new[] { 1, 2, 3 });
var list3 = new LinkedList<int>(new[] { 1, 2, 4 });
// পদ্ধতি ১: SequenceEqual (LINQ) - সেরা পদ্ধতি
Console.WriteLine("SequenceEqual(list1, list2): " + list1.SequenceEqual(list2)); // True
Console.WriteLine("SequenceEqual(list1, list3): " + list1.SequenceEqual(list3)); // False
// পদ্ধতি ২: ম্যানুয়াল লুপ (নো LINQ ডিপেন্ডেন্সি)
bool ManualEquals(LinkedList<int> a, LinkedList<int> b) {
if (a.Count != b.Count) return false;
var nodeA = a.First;
var nodeB = b.First;
while (nodeA != null) {
if (!Equals(nodeA.Value, nodeB.Value)) return false;
nodeA = nodeA.Next;
nodeB = nodeB.Next;
}
return true;
}
Console.WriteLine("ManualEquals(list1, list2): " + ManualEquals(list1, list2)); // True
// পদ্ধতি ৩: ToArray() + StructuralComparisons (বড় লিস্টের জন্য স্লো)
Console.WriteLine("StructuralComparisons: " +
System.Collections.IStructuralEquatable.Equals(
list1.ToArray(), list2.ToArray(), EqualityComparer<int>.Default)); // True
}
}
LinkedList vs List - সমতা চেক তুলনা
| বৈশিষ্ট্য | LinkedList<T> | List<T> |
|---|---|---|
| Equals() ওভাররাইড | না (রেফারেন্স সমতা) | না (রেফারেন্স সমতা) |
| কন্টেন্ট তুলনা | SequenceEqual() ব্যবহার করুন | SequenceEqual() ব্যবহার করুন |
| ইন্ডেক্স অ্যাক্সেস | না (O(n) ট্রাভার্সাল) | হ্যাঁ O(1) |
| ইনসারশন/ডিলিশন (মিডল) | O(1) নোড রেফারেন্স দিয়ে | O(n) শিফটিং |
সেরা অনুশীলন
- কন্টেন্ট তুলনার জন্য:
list1.SequenceEqual(list2)(LINQ, System.Linq namespace) - পারফরম্যান্স-ক্রিটিক্যাল: ম্যানুয়াল নোড ট্রাভার্সাল (নো অ্যালোকেশন)
- রেফারেন্স চেকের জন্য:
ReferenceEquals(list1, list2)বাlist1 == list2 - নাল-সেফ স্ট্যাটিক:
object.Equals(list1, list2)(রেফারেন্স সমতা চেক করে)
নোট: LinkedList<T> ডাবলি-লিঙ্কড লিস্ট বাস্তবায়ন। ছোট লিস্টের জন্য List<T> সাধারণত ফাস্ট (ক্যাশে লোক্যালিটি)। LinkedList ব্যবহার করুন যখন মিডল-ইনসারশন/ডিলিশন ফ্রিকোয়েন্ট হয়।