I have an assignment that I am working on, and I can’t get a hold of the professor to get clarity on something. The idea is that we are writing an anagram solver, using a given set of words, that we store in 3 different dictionary classes: Linear, Binary, and Hash.
So we read in the words from a textfile, and for the first 2 dictionary objects(linear and binary), we store the words as an ArrayList…easy enough.
But for the HashDictionary, he want’s us to store the words in a HashTable. I’m just not sure what the values are going to be for the HashTable, or why you would do that. The instructions say we store the words in a Hashtable for quick retrieval, but I just don’t get what the point of that is. Makes sense to store words in an arraylist, but I’m just not sure of how key/value pairing helps with a dictionary.
Maybe i’m not giving enough details, but I figured maybe someone would have seen something like this and its obvious to them.
Each of our classes has a contains method, that returns a boolean representing whether or not a word passed in is in the dictionary, so the linear does a linear search of the arraylist, the binary does a binary search of the arraylist, and I’m not sure about the hash….
The difference is speed. Both methods work, but the hash table is fast.
When you use an
ArrayList, or any sort ofList, to find an element, you must inspect each list item, one by one, until you find the desired word. If the word isn’t there, you’ve looped through the entire list.When you use a
HashTable, you perform some “magic” on the word you are looking up known as calculating the word’s hash. Using that hash value, instead of looping through a list of values, you can immediately deduce where to find your word – or, if your word doesn’t exist in the hash, that your word isn’t there.I’ve oversimplified here, but that’s the general idea. You can find another question here with a variety of explanations on how a hash table works.
Here is a small code snippet utilizing a
HashMap.The problem you describe asks that you use a
HashMapas the basis for a dictionary that fulfills three requirements:It seems counter-intuitive to use a map, which stores a key and a value, since all you really want to is store just a key (or just a value). However, as I described above, a
HashMapmakes it extremely quick to find the value associated with a key. Similarly, it makes it extremely quick to see if theHashMapknows about a key at all. We can leverage this quality by storing each of the dictionary words as a key in theHashMap, and associating it with a garbage value (since we don’t care about it), such asnull.You can see how to fulfill the three requirements, as follows.
I don’t want to overload you with information, but the requirements we have here align with a data structure known as a
Set. In Java, a commonly usedSetis theHashSet, which is almost exactly what you are implementing with this bit of your homework assignment. (In fact, if this weren’t a homework assignment explicitly instructing you to use aHashMap, I’d recommend you instead use aHashSet.)