Diferencias entre HashMap y HashTable en Java

Publicado: 2021-06-02

Si está aprendiendo sobre Java y sus aplicaciones, debe haber encontrado HashMap y HashTable. Ambos se encuentran entre las clases más importantes en el marco de Java Collection. Los usará ampliamente mientras desarrolla con Java, por lo que es vital comprender sus diferencias.

En los siguientes puntos, cubriremos el tema HashTable vs HashMap en detalle y explicaremos las diferencias entre los dos:

Tabla de contenido

¿Qué es Hash Map?

HashMap ha estado en la colección de Java desde la introducción de Java 1.2. Le permite realizar implementaciones básicas de la interfaz Map de Java. HashMap almacena datos en pares (Clave, Valor), y para acceder a ellos, deberá usar un índice de otro tipo, como un número entero.

Aquí, utiliza un objeto como clave (índice) para otro objeto (valor), de ahí el uso del par (clave, valor). Si agrega una clave duplicada, reemplazará el elemento de la clave correspondiente.

Características de HashMap

Para comprender las diferencias entre HashTable y HashMap, primero debe comprender sus características. Te familiarizaría con los conceptos básicos de ambos. HashMap tiene las siguientes características:

  • Es parte del paquete java.util.
  • Extiende una clase abstracta AbstractMap que proporciona una implementación incompleta de la interfaz Map.
  • Además de implementar la interfaz Map, también implementa interfaces serializables y clonables.
  • Permite valores duplicados pero no permite claves duplicadas. Esto significa que una clave no puede tener más de un valor, pero varias claves pueden tener un solo valor.
  • Puede usar la clave nula solo una vez en un HashMap, pero puede usar múltiples valores nulos.
  • No garantiza el orden del mapa, en particular si el orden se mantendrá o no constante a lo largo del tiempo. HashMap es casi similar a HashTable pero no está sincronizado.
  • HashSet usa HashMap internamente.

¿Qué es HashTable?

Utiliza la clase HashTable para implementar una tabla hash que asigna claves a valores. Aquí, puede usar objetos no nulos como clave o como valor. Tenga en cuenta que para almacenar y recuperar objetos de una tabla hash correctamente, los objetos que usó como claves deben implementar el método hashCode y el método equals.

Una tabla hash almacena datos en un formato de matriz y cada valor de datos tiene un valor de índice único. Esto le permite acceder a datos particulares con bastante rapidez si conoce el índice requerido.

Características de HashTable

HashTable tiene sus características peculiares, al igual que HashMap. Sin embargo, estas características lo hacen único y diferente de HashMap en muchos aspectos:

  • HashTable es bastante similar a HashMap pero está sincronizado.
  • Almacena pares clave-valor en una tabla hash.
  • Aquí, especificas un objeto usado como clave y el valor que quieres asociar al mismo. Luego, codifica la clave y usa el código hash generado como el índice donde almacena el valor dentro de la tabla.
  • La capacidad predeterminada de la clase Hashtable es 11 y el factor de carga es 0,75.
  • HashMap no ofrece enumeración, mientras que Hashtable no ofrece enumeración rápida.

Diferencias entre HashMap y HashTable

Ahora que conoce los aspectos destacados particulares de HashMap y HashTable, ahora los compararemos y veremos las diferencias destacadas entre los dos:

mapa hash Tabla de picadillo
No está sincronizado. No puede compartir muchos hilos aquí sin usar el código de sincronización adecuado porque no es seguro para subprocesos. Está sincronizado. Puede compartirlo con muchos subprocesos porque es seguro para subprocesos.
Hereda la clase AbstractMap. Hereda la clase Dictionary.
Aquí, el iterador es rápido. En HashTable, el enumerador no es rápido.
El iterador atraviesa el HashMap. El enumerador y el iterador atraviesan HashTable.
Puede sincronizar un HashMap llamando al código
Mapa m = Colecciones.synchronisedMap(hashMap);
Las tablas hash se sincronizan internamente y no se pueden desincronizar con ningún código.
es bastante rápido Es relativamente más lento que HashMap.
HashMap es una clase nueva y se introdujo recientemente en JDK 1.2. HashTable es una clase heredada.
Permite múltiples valores nulos y una clave nula. No permite ningún valor nulo o clave.

Ejemplo de codificación

El siguiente es un ejemplo de HashMap y HashTable en funcionamiento para que pueda comprender las diferencias entre HashMap y HashTable.

Aporte:

importar java.util.*;

importar java.lang.*;

importar java.io.*;

clase pública JavaTester{

public static void main(String args[]){

Hashtable ht=nueva Hashtable();

ht.put(1,”Uday”);

ht.put(1,”Ujjwal”);

ht.put(2,”Sumitir”);

ht.put(3,”Vijay”);

System.out.println(“————-Tabla hash————–“);

Set<Entero> keySet = ht.keySet();

para (clave entera:keySet) {

System.out.println(clave + ” “+ht.get(clave));

}

HashMap hm=nuevo HashMap();

hm.put(0,”Uday”);

hm.put(4,”Uday”); // puedes tener valores duplicados en un hashmap

hm.put(1,”Sumitir”);

hm.put(2,”Vijay”);

System.out.println(“———–Mapa hash———–“);

Set<Entero> keySet1 = ht.keySet();

para (clave entera:keySet) {

System.out.println(clave + ” “+hm.get(clave));

}

}

}

Producción:

Tabla de picadillo:

3 Vijay

2 suma

1 Ujjwal

Mapa hash:

0 día

1 Sumita

2 vijay

4 de día

¿Cuándo usar HashMap vs HashTable?

El factor principal que determina si utilizará HashMap o HashTable es la sincronización. Si necesita una tarea segura para subprocesos, debe usar HashTable porque todos sus métodos están sincronizados. Sin embargo, es una clase heredada y debe evitarlos.

Si tiene un entorno de subprocesos múltiples, debe usar ConcurrentHashMap, ya que es bastante similar a HashTable. Te permite sincronizar correctamente el HashMap.

Las operaciones sincronizadas provocan un rendimiento deficiente, por lo que debe evitarlas en la mayoría de los casos. Además, HashMap es adecuado para un entorno sin subprocesos, por lo que puede usarlo fácilmente.

Aprenda cursos de software en línea de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.

Conclusión

HashMap y HashTable son códigos Java populares con funciones similares. Sin embargo, como puede ver, hay varias diferencias importantes entre los dos. HashMap es una clase de Java, mientras que HashTable es una estructura de datos.

Si estás interesado en aprender más sobre Java y otros lenguajes de programación, te recomendamos consultar nuestro Programa PG Ejecutivo en Desarrollo de Software con Especialización en Desarrollo Full Stack .

¿Qué es una tabla hash?

La tabla hash es una estructura de datos de contenedor que se usa ampliamente en la programación de computadoras. Las tablas hash se utilizan para contener pares clave-valor, donde la clave puede ser cualquier objeto. Como contenedor, una tabla hash debe admitir las operaciones de inserción y eliminación. Como herramienta de búsqueda, una tabla hash debe admitir la operación de obtención. Si se supone que una tabla hash es una estructura de datos de diccionario, también debe admitir la operación de contiene. Entonces, en general, una tabla hash es una estructura de datos que se usa ampliamente para implementar de manera efectiva las operaciones de insertar, eliminar, obtener y contener. La tabla hash es muy utilizada debido a su rápido rendimiento.

¿Qué es el marco de colecciones en Java?

Java Collections Framework es un conjunto de interfaces, clases y algoritmos para la plataforma Java. Forma parte de la Plataforma Java desde la versión 1.2. Incluye interfaces para contenedores, listas, colas, etc., pero también incluye clases para manejar fechas y horas, una clase para manejar expresiones regulares, otra para manejar la internacionalización y otra más para manejar la búsqueda en archivos.

¿Cuál es la relación entre una tabla hash y un mapa hash en Java?

Una tabla hash es una estructura de datos especial que asocia claves con valores. Las claves pueden ser cualquier objeto, pero todas las claves en una tabla hash dada deben ser comparables entre sí (es decir, usar las mismas interfaces o interfaces compatibles). En Java, un mapa es un tipo específico de tabla hash que se implementa mediante un TreeMap. Las claves en un mapa deben implementar un método de igualdad, y el mapa usa este método para determinar si dos claves son iguales o no. Esto significa que solo las claves se almacenan en el mapa y su valor asociado se calcula cada vez que se necesita.