3. [Hashing, 40 pts] In this problem, you have to implement (in java) a hash
table and test how different load factor impact the performance of hash data
structure. Collisions must be resolved by separate chaining.
• You have been provided a data set for this task is a CSV file (zip-
code.csv) with two columns, namely zipcode and population.
• You have to run the program for load factor $\alpha = 0.85$, $\alpha = 0.80$,
$\alpha = 0.75$, $\alpha = 0.70$, and $\alpha = 0.65$, $\alpha = 0.60$. Note the number of keys
for this problem are fixed (see the data file). Therefore the table size
is determined by the load factor.
• Your class should be called hash.java and must include the following
functions.
1. int hash(String key): insert keys using universal hashing. Note
keys are of type strings, thus they must be prehashed using the
hashCode method for strings.
2. void insert(String key, String data) new entries in the table using
Universal hash function(the one we saw in the class).
3. String search(String key): return the population from the hash
table for a given ZIP code.
4. Read the CSV file and insert all the entries into the hash table
using the ZIP codes as keys.
5. double average_length(): Return the average length of the linkedlists.
6. double average_collision(): return the average number of colli-
sions.
7. Plot the average number of collisions vs load factor.
Java the command LinkedList<String>[] L = new LinkedList[m] will
create an array of linkedlist of size m. You are allowed to use inbuild
java functions for the linkedlist.