// 2d hash table of student objects import java.util.ArrayList; class student { public final String name; public final int id; protected double gpa; // other boring stuff skipped. public student(String n, int i) { name=n; id=i; gpa = ((int)(Math.random()*401))/100.0; } public String toString() { return name+" has id "+id+" and GPA "+gpa; } }//student class public class student2d extends TDHash { protected String getkey1(student s) { return s.name; } protected Integer getkey2(student s) { return s.id; } // constructor: public student2d(int r, int c) // sets capacity by rows, cols { rows =r; cols =c; H = new ArrayList[rows][cols]; // compiler warning expected for(r=0;r(); } // override public int hash1(String n) // my own string hash function: sum(ascii(i)) { int ax = 0; for(int i=0;i