কম্পিউটার টিউটোরিয়াল

C#-তে Hashtable এবং Dictionary-এর পার্থক্য

দ্রুত তুলনা

বিষয়HashtableDictionary<TKey, TValue>
প্রকৃতিনন-জেনেরিক (System.Collections)জেনেরিক (System.Collections.Generic)
টাইপ সেফটিনা (object key/value)হ্যাঁ (কম্পাইল টাইম চেক)
বক্সিং/আনবক্সিংহ্যাঁ (ভ্যালু টাইপের জন্য)না (স্ট্রাং টাইপড)
পারফরম্যান্সधीম (বক্সিং ওভারহেড)দ্রুত (নো বক্সিং)
Null কীঅনুমোদিত (একটি null key)অনুমোদিত (একটি null key)
Null ভ্যালুঅনুমোদিতঅনুমোদিত (রেফারেন্স টাইপের জন্য)
অনuporation অর্ডারমেইনটেইন করে নাইনসারশন অর্ডার মেইনটেইন করে (`.NET Core 3.0+ / .NET 5+)
থ্রেড সেফিটিHashtable.Synchronized() দিয়ে র‍্যাপারনেই (ConcurrentDictionary ব্যবহার করুন)

Hashtable উদাহরণ (লিগেসি)


using System;
using System.Collections;

var ht = new Hashtable();
ht.Add(1, "One");           // int key
ht.Add("Two", 2);           // string key, int value — মিক্সড টাইপ!
ht.Add("Key", null);        // null value OK

foreach (DictionaryEntry entry in ht) {
    Console.WriteLine($"Key: {entry.Key} ({entry.Key.GetType().Name}), Value: {entry.Value}");
}

// লুকআপ — কী না থাকলে null ফেরত দেয় (নো এক্সেপশন)
Console.WriteLine(ht[999]); // null

Dictionary উদাহরণ (আধুনিক, প্রস্তাবিত)


using System;
using System.Collections.Generic;

var dict = new Dictionary<int, string>();
dict.Add(1, "One");
dict.Add(2, "Two");
// dict.Add("Three", 3); // ❌ Compile error: টাইপ মিসম্যাচ

// লুকআপ — কী না থাকলে KeyNotFoundException
try {
    var val = dict[999];
} catch (KeyNotFoundException) {
    Console.WriteLine("Key not found");
}

// সেফ লুকআপ
if (dict.TryGetValue(2, out var val)) {
    Console.WriteLine(val); // Two
}

// ইনসারশন অর্ডার মেইনটেইন (.NET Core 3.0+)
var ordered = new Dictionary<int, string> {
    { 3, "Three" }, { 1, "One" }, { 2, "Two" }
};
foreach (var kvp in ordered) {
    Console.WriteLine($"{kvp.Key}: {kvp.Value}"); // 3, 1, 2 অর্ডারে
}

কেন Dictionary ভালো?

  1. টাইপ সেফটি: কম্পাইল টাইমে বাগ ধরা যায়
  2. পারফরম্যান্স: বক্সিং/আনবক্সিং নেই, জেনেরিক স্পেশালাইজেশন
  3. রিডেবিলিটি: dict[int] vs (string)ht[1]
  4. LINQ সাপোর্ট: ফুল LINQ এক্সটেনশন মেথড

যখন Hashtable ব্যবহার করতে হয়?

  • .NET Framework 1.x/2.x লিগেসি কোড মেইনটেইন করলে
  • COM ইন্টারঅপ, পুরানো API যা Hashtable এক্সপেক্ট করে
  • খুব পুরানো প্রজেক্টে মাইগ্রেশন না করতেই হলে

অন্যান্য বিকল্প

কলেকশনব্যবহার
ConcurrentDictionary<TKey,TValue>থ্রেড-সেফ ডিকশনারি (মাল্টিথ্রেডেড)
SortedDictionary<TKey,TValue>সর্টেড কী (Red-Black Tree)
SortedList<TKey,TValue>সর্টেড কী, ইন্ডেক্স অ্যাক্সেস, কম মেমরি
ImmutableDictionary<TKey,TValue>ইমিউটেবল, থ্রেড-সেফ বাই ডিফল্ট
FrozenDictionary<TKey,TValue> (.NET 8+)রিড-ওনলি, অপ্টিমাইজড লুকআপ

মাইগ্রেশন টিপস


// Hashtable → Dictionary
var dict = new Dictionary<string, object>();
foreach (DictionaryEntry entry in oldHashtable) {
    dict[(string)entry.Key] = entry.Value;
}

// Dictionary → Hashtable (রেয়ার)
var ht = new Hashtable(dict); // Constructor accepte IDictionary
  1. C# এবং Visual C#-র পার্থক্য

  2. C# এবং .NET-এর পার্থক্য

  3. C#-এ Dictionary এবং Hashtable এর পার্থক্য

  4. C#-এ List এবং Dictionary-এর পার্থক্য