Hello , i need help with this java program
Step 1: Hash Code Generation. Create a map element class for
pairs. This will be a non-generic implementation. Specifically, have Keys of Integer type, while Values can be anything you want. Ensure your implementation has the following two methods (in addition to standard methods you will need Write a constructor that generates a new pair with a random Integer key Write a method: public int hashCode (). This should implement one of the hashing methods discussed in class (e.g. polynomial accumulation, cyclic shifts, etc.). The output of hashCode () is int; your hash does not have to use the full capacity of int but should be at least 16 bits. Step 2: Compression and Hash Tables. Create an abstract hash table with a fixed capacity (passed in as an int at construction time). Create a set of children classes that are concrete hash tables that implement the following collision resolution mechanisms: (1) separate chaining (the bucket object can be any suitable data structure), (2) linear probing and (3) quadratic probing. Any function that is the same across these three implementations should be placed in the abstract parent class. To compress the output of hashCode () to an index in the table, mod the output by the capacity of the table. The following methods should be supported: size(): Returns the number of entries in M. isEmpty): Returns a boolean indicating whether M is empty get(): Returns the value vassociated with key k, if such an entry exists otherwise returns null. put(k, v): If M does not have an entry with key equal to k, then adds entry (k, v) to M and returns null; else, replaces with v the existing value of the entry with key equal to k and returns the old value remove(&): Removes from M the entry with key equal to k, and returns its value; if M has no such entry, then returns null. Step 1: Hash Code Generation. Create a map element class for pairs. This will be a non-generic implementation. Specifically, have Keys of Integer type, while Values can be anything you want. Ensure your implementation has the following two methods (in addition to standard methods you will need Write a constructor that generates a new pair with a random Integer key Write a method: public int hashCode (). This should implement one of the hashing methods discussed in class (e.g. polynomial accumulation, cyclic shifts, etc.). The output of hashCode () is int; your hash does not have to use the full capacity of int but should be at least 16 bits. Step 2: Compression and Hash Tables. Create an abstract hash table with a fixed capacity (passed in as an int at construction time). Create a set of children classes that are concrete hash tables that implement the following collision resolution mechanisms: (1) separate chaining (the bucket object can be any suitable data structure), (2) linear probing and (3) quadratic probing. Any function that is the same across these three implementations should be placed in the abstract parent class. To compress the output of hashCode () to an index in the table, mod the output by the capacity of the table. The following methods should be supported: size(): Returns the number of entries in M. isEmpty): Returns a boolean indicating whether M is empty get(): Returns the value vassociated with key k, if such an entry exists otherwise returns null. put(k, v): If M does not have an entry with key equal to k, then adds entry (k, v) to M and returns null; else, replaces with v the existing value of the entry with key equal to k and returns the old value remove(&): Removes from M the entry with key equal to k, and returns its value; if M has no such entry, then returns null