La clase HashTable es parte del marco de la colección en Java, donde la única diferencia importante que tiene con HashMap es que está sincronizada. La tabla hash asigna claves a valores, es decir, utiliza cubos internamente para almacenar pares clave-valor y el cubo correspondiente a un par clave-valor está determinado por el código hash de la clave. Mientras usamos una tabla Hash, especificamos cualquier objeto que se use como clave y cualquier valor que queramos vincular a esa clave. Cualquier objeto no nulo se puede utilizar como clave.
Concepto: método hashCode()
Hay ciertas cosas que deben mantenerse alarmadas mientras se anula el método hashCode() , que es el siguiente:
- Si dos objetos son iguales al método equals(), entonces hashCode() debería devolver el mismo valor para ambos cuando se llame a estos objetos.
- Aunque no es necesario que hashCode() siempre devuelva un valor distinto para los objetos que no se consideran iguales de acuerdo con el método equals(), se debe tener en cuenta que hay colisiones mínimas.
- Cada vez que se llama al método hashCode() en el mismo objeto en cualquier momento del programa, debe devolver el mismo valor.
Método: para utilizar cualquier objeto definido por el usuario como clave, su clase correspondiente debe implementar el método hashCode() y el método equals() . Dado que la tabla hash utiliza estos métodos para almacenar y recuperar con éxito las entradas.
Implementación: Vamos a crear una subclase al azar para demostrar la clase Teacher llamada . Contiene la identificación del maestro y el nombre del maestro . Aquí, dos o más profesores no pueden tener la misma identificación, pero pueden tener el mismo nombre. Esta lógica la implementaremos en el método equals() de la clase Teacher. Este ejemplo muestra que los objetos definidos por el usuario se pueden usar como claves en la tabla Hash y pueden evitar cualquier clave duplicada.
Ejemplo 1: Subclase | clase de profesor
Java
// Sub-class public class Teacher { // Member variables private int id; private String name; // Constructor public Teacher(int id, String name) { // This keyword to refer current object this.id = id; this.name = name; } // Remember : Can create own logic and implement // that in this method,but here // Supposed to use the already defined logic // which uses the "id" to generate a hash // Override hash code @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } // Overriding the equals method // to compare the equality of two objects @Override public boolean equals(Object obj) { // Step 1: Checking whether its a same object if (this == obj) return true; // Step 2: Checking whether the object is null if (obj == null) return false; // Step 3: Checking the instance of the object // here we can also use the instance of operator if (getClass() != obj.getClass()) return false; // Step 4: If the two objects do not have the // same "id" then they are treated as unequal // objects Teacher other = (Teacher)obj; if (id != other.id) return false; return true; } // overriding toString() // to print the Teacher detail @Override public String toString() { return name + " (" + id + ")"; } }
Ejemplo 2: Creación de una clase de controlador
Crear una clase de controlador que contenga una tabla Hash que almacene el par clave-valor. Aquí, abandone como se demuestra en el ejemplo 1: el nombre del departamento se almacenará como un valor de ese maestro en particular.
Java
// Driver class // Importing Hashtable and Set class from // java.util package import java.util.Hashtable; import java.util.Set; public class Gfg { // Main driver method public static void main(String args[]) { // Creating a Hashtable object with key and value // key of type Teacher and // corresponding value of type string Hashtable<Teacher, String> table = new Hashtable<>(); // Adding value to the hash table object // Custom inputs (4 inputs here) table.put(new Teacher(12, "Mrs. Shalini Singhal"), "IT"); table.put(new Teacher(58, "Mrs. Sunita Gupta"), "IT"); table.put(new Teacher(11, "Mr. Kailash Soni"), "CS"); // adding duplicate key table.put(new Teacher(12, "Mrs. Shalini Singhal"), "IT"); // Printing all the values // from the table creating a set of keys // Retrieving the keys from the keyset() method Set<Teacher> keys = table.keySet(); // For-each loop to traverse and print // all the correspondong values for (Teacher t : keys) { // Printing all values from table from above // retrieved keys System.out.println(t + " ==> " + table.get(t)); } } }
Producción:
Mrs. Shalini Singhal (12) ==> IT Mr. Kailash Soni (11) ==> CS Mrs. Sunita Gupta (58) ==> IT