Project: Complete exercise C-10.40 on p. 454 in the textbook. Read the problem statement carefully. The authors initially describe the behavior of the java.util.Hashmap class. As they describe it, the Java implementation of a Hash Map consists of a table (bucket array) of entries. Each entry consists of a K, V pair with the addition of a next reference that refers to a next entry in the bucket. In that way, if collisions have occurred and multiple entries/keys hash to the same bucket, they will be arranged in a singly linked list.
Data Structure Classes: Your job is to modify the ChainHashMap class of the textbook to exhibit the same behavior. You will be modifying the source code of the author's classes - so the first step will be to copy those files to your eclipse package. At a minimum I would recommend these:
1. Map.java
2. AbstractMapjava
3. UnsortedTableMap ava
4. AbstractHashMap.java
5. ChainHashMap.java
6. Entry.java
You can approach your solution in one of several different ways.
Some approaches might be:
1) modify Entry to include the extra field for the next reference. The method findIndex will need to utilize a hash value to find the appropriate bucket. Methods bucketGet and bucketPut will need to walk through the list as necessary looking for a key match.
or 2)instead of modifying Entry, modify UnsortedTableMap to create an array list of singly linked lists. Other methods will have to be modified as well to adapt the methods of the list class.
Test Driver: You will need to create a test driver. Create an implementation of Code Fragment 10.2, p. 405 in the textbook. Rather than reading from System.in, do file I/O with Java.
File Data and Name: In order to generate test data, you must use my file named ‘system.txt' that is in the Blackboard Information content area. You can ‘hard code' this name into your program - or better yet, pass the file name as a command line argument and read that within the test driver. And you might have to play around with ‘where' to put the file. Eclipse and Java don't necessarily look in the directory containing the code, but the directory above.