...I don't know what hashmaps and dictionaries are. So uh, what are they? And what makes them so great?
Fast lookups in large lists of objets.
First you have to know what a binary search is, it's like how you (should) search a phone book, or a real life paper dictionary, start in the middle, and keep splitting in half until you find the item.
A dictionary (IIRC, I might be wrong, a dictionary could use a hashtable internally to store it's keys) does this on the field you specify as the key; so that a thousand item dictionary can be searched in 10 tests, or a million items searched in 20.
Then you have to know what a Hash is, it's a number generated from an object; a simple example of a hash would be to take the sum of the digits of a phone number, and then only keeping the last digit, so 555-1212 sums to 21, so a hash could be '1'.
A hashmap allows you to quickly locate a known object; it won't help you at all if you only have part of the data, like knowing the number ends with -1212 is useless in this case.
So, we have the phone number than hashes to '1', so we can store the '555-1212' in a sub-list (known as a bucket) referred to as '1'.
So, if we want to answer the question "Is 555-1212 on the do-not-call list?" we don't have to check bucket 0,2,3,4,5,6,7,8, or 9, only bucket 1; dividing the time to answer that type of question by the number of buckets (10)
A bucket can contain multiple items, '555-1221 -1122 -2211 -2112... all have the same sum of digits, so would end up within the same bucket; some hashtables (like the one in .net) automatically expand the table size as it gets fuller, trying to keep a balance between number of buckets, and the size of the buckets (as close to 1 as possible)
An advantage of a properly written and used Hashtable is that the entries are balanced, with an equal chance for any hash value; while if you load up a dictionary with phone numbers all in the same area code and prefix, it might waste time trying to narrow down to the whole set... like
500-000-0000
750-000-0000
625-000-0000
562-500-0000
...
which would be a watse if all your entries start with 555-XXX-XXXX