.NET HashTable Vs Dictionary - Can the Dictionary be as fast?
I am trying to figure out when and why to use a Dictionary or a HashTable. I have done a bit of a search on here and have found people talking about the generic advantages of the Dictionary which I totally agree with, which leads the boxing and unboxing advantage for a slight performance gain.
But I have also read the Dictionary will not always return the objects in the order they are inserted, thing it is sorted. Where as a HashTable will. As I understand it this leads to the HashTable being far faster for some situations.
My question is really, what might those situations be? Am I just wrong in my assumptions above? What situations might you use to choose one above the other, (yes the last one is a bit ambiguous).
Solution 1:
System.Collections.Generic.Dictionary<TKey, TValue>
and System.Collections.Hashtable
classes both maintain a hash table data structure internally. None of them guarantee preserving the order of items.
Leaving boxing/unboxing issues aside, most of the time, they should have very similar performance.
The primary structural difference between them is that Dictionary
relies on chaining (maintaining a list of items for each hash table bucket) to resolve collisions whereas Hashtable
uses rehashing for collision resolution (when a collision occurs, tries another hash function to map the key to a bucket).
There is little benefit to use Hashtable
class if you are targeting for .NET Framework 2.0+. It's effectively rendered obsolete by Dictionary<TKey, TValue>
.
Solution 2:
I guess it doesn't mean anything to you now. But just for reference for people stopping by
Performance Test - SortedList vs. SortedDictionary vs. Dictionary vs. Hashtable
Memory allocation:
Time used for inserting:
Time for searching an item:
Solution 3:
Differences between Hashtable and Dictionary
Dictionary:
- Dictionary returns error if we try to find a key which does not exist.
- Dictionary faster than a Hashtable because there is no boxing and unboxing.
- Dictionary is a generic type which means we can use it with any data type.
Hashtable:
- Hashtable returns null if we try to find a key which does not exist.
- Hashtable slower than dictionary because it requires boxing and unboxing.
- Hashtable is not a generic type,
Solution 4:
Another important difference is that the Hashtable type supports lock-free multiple readers and a single writer at the same time, while Dictionary does not.