Overview
- Special-case dictionaries
- ListDictionary
- Used as a Hashtable for fewer than 10 items.
- Implemented as a simple linked list behind the scenes.
- Same interface as Hashtable, easy to replace.
- HybridDictionary
- Used as a Hashtable when the number of items is unknown.
- Implemented as a combination of Hashtable and ListDictionary.
- Switches over to a Hashtable when the collection becomes too big.
- Same interface as Hashtable, easy to replace.
- OrderedDictionary
- Used as a Hashtable when you need access by index.
- A plain dictionary mapping, like a cross between Hashtable and ArrayList.
Good practice
- When possible, use a generic collection instead.
Examples
ListDictionary: Adding and Removing Elements
ListDictionary a = new ListDictionary();
a.Add("Key2", "Hello");
a.Add("Key1", "World");
a.Add("Key0", "Start");
Console.WriteLine(a["Key1"] + " " + a["Key2"]);
Console.WriteLine();
foreach (DictionaryEntry d in a) { Console.WriteLine(d.Value); }
Console.WriteLine();
foreach (object v in a.Values) { Console.WriteLine(v); }
Console.WriteLine();
a.Remove("Key1");
foreach (object k in a.Keys) { Console.WriteLine(a[k]); }
HybridDictionary: Adding and Removing Elements
HybridDictionary a = new HybridDictionary();
a.Add("Key2", "Hello");
a.Add("Key1", "World");
a.Add("Key0", "Start");
Console.WriteLine(a["Key1"] + " " + a["Key2"]);
Console.WriteLine();
foreach (DictionaryEntry d in a) { Console.WriteLine(d.Value); }
Console.WriteLine();
foreach (object v in a.Values) { Console.WriteLine(v); }
Console.WriteLine();
a.Remove("Key1");
foreach (object k in a.Keys) { Console.WriteLine(a[k]); }
OrderedDictionary: Adding and Removing Elements
OrderedDictionary a = new OrderedDictionary();
a.Add("Key1", "Hello");
a.Add("Key2", "World");
a.Add("Key0", "Start");
a.Insert(1, "Key10", "Inserted");
Console.WriteLine(a["Key1"] + " " + a["Key2"]);
Console.WriteLine();
foreach (DictionaryEntry d in a) { Console.WriteLine(d.Value); }
Console.WriteLine();
foreach (object v in a.Values) { Console.WriteLine(v); }
Console.WriteLine();
a.Remove("Key1");
a.RemoveAt(0);
foreach (object k in a.Keys) { Console.WriteLine(a[k]); }
You May Also Like

Exam 70-536 Study Notes
My study notes for Microsoft exam 70-536: .NET types, collections, generics, I/O, serialization and more, with C# examples.

Starting Exam 70-536 Study
After a burnout, I'm putting my own project on hold to study for Microsoft exam 70-536.

Design Patterns - Proxy Pattern
The Proxy Pattern, and the last article in the design patterns series, now that I've finished reading Head First Design Patterns.




