Issue
Ok, I will confess I’ve not dug out reflector to look at what’s going on here, but I’m hoping someone can tell me.
How do Microsoft make adding and fetching so fast, I can make adding fast by just sticking items in an array, and I can make fetching fast by sorting the array and using a binary search. If however, I was to do a quicksort every time an item was added to make fetching data fast, adding would slow down massively, and if I had to sort the data every time I tried to fetch something, adding items would slow massively.
Does anyone know the internal workings of a dictionary? It is a fair bit more memory hungry than an array, so there’s clearly something other than clever algorithms going on behind the scenes.
I’m trying to understand the magic and learn from it!
Solution
The dictionary<T,T>
in .Net is a data structure called a hash table:
On Hash Table and .Net Dictionary:
http://en.wikipedia.org/wiki/Hash_table
http://msdn.microsoft.com/en-us/library/4yh14awz.aspx
http://www.cs.auckland.ac.nz/~jmor159/PLDS210/hash_tables.html
On Binary Search:
http://en.wikipedia.org/wiki/Binary_search
You’re right, it uses more memory than an array to retrieve data. That’s the trade off you pay for faster access. (This is true in most cases, when you start taking into account the setup time to build a hash table vs an array, at times a sorted array could be faster for setup time and access. In general this is a valid assumption though.)
Answered By – kemiller2002
Answer Checked By – Clifford M. (BugsFixing Volunteer)