This folder contains the following files (ReadMe.txt) + Map.java > this is the Map interface as seen in lectures HashTableMap.java > this is an implementation of the Map ADT using a hash table Note that the hash table consists of an array of linked lists, each of which represents a set. Therefore we can use the NodeSet implementation of a set that we used in Chapter 7. Hence folder contains files NodeSet.java, Set.java, Node.java > so that we can use the NodeSet class Returning to HashTableMap.java. In order to implement the hashCode() method of the HashEntry inner class, we need to ensure that it is possible to hash elements of type K. To do this we define an interface Hashable.java > which contains a single method, public int hashCode(int n), which will return a hashCode with respect to an integer n. For any type K that we want to use, we need to define a hashable enclosing class for it. So, in order to allow us to hash keys of type String, we define a class HashableString, via file HashableString.java > which implements the Hashable interface. Note that the hashcode we use is actually a hash code + hash function combined (so we don't need to use a hash function as well). The accumulator hash code implementation is courtesy of Prof Sventek, who used it in his hashtable implementation in tutorial 8. Finally, TestMap.java > is a (rather crude) test program. It takes a list of String, integer pairs from the file phoneExtensions.txt, and inserts the corresponding HashableString, Integer entries into a HashTableMap. I have left commenting lines in so that you can see the hashcode at work, and see the structure of the hash table. Notice that there are two entries with the same key ("Prosser"). This is here to check that the corresponding value in the table is overwritten properly. The get and remove methods are also tested.