HashMap y Hashtable

Anonim

El marco de Java Collections proporciona un conjunto de clases de colección. Cada clase tiene sus propias fortalezas y debilidades de rendimiento. Algunas de las clases proporcionan implementaciones completas que pueden usarse tal como están. Otros son abstractos que proporcionan implementaciones esqueléticas que se utilizan como puntos de partida para crear colecciones. Las implementaciones de recopilación utilizan el marco de contenedor sincronizado para proporcionar clases sincronizadas, de lo contrario las implementaciones no están sincronizadas. Varias clases proporcionan implementaciones de la interfaz del mapa.

La plataforma Java contiene tres implementaciones de mapas de propósito general: HashMap, TreeMap y LinkedHashMap. HashMap y Hashtable son dos colecciones en Java utilizadas para almacenar pares clave / valor en una tabla hash. Hashtable es un mapa sincronizado y HashMap es un mapa no sincronizado. Sin embargo, si necesita usar un Mapa sincronizado, un Hashtable es más rápido que usar un HashMap en un contenedor sincronizado. Ambas son colecciones basadas en hash en Java pero tienen su parte justa de diferencias. Destacamos algunas diferencias clave entre los dos para ayudarlo a comprender mejor los términos.

¿Qué es HashMap?

HashMap es una implementación de mapa basada en una tabla hash que proporciona un rendimiento de tiempo constante para insertar y localizar pares. La clase HashMap proporciona una implementación de mapa que se basa en una estructura de datos Hashtable. Esta implementación es compatible con todas las operaciones de Map y permite múltiples valores nulos pero solo una clave nula. Utiliza pares clave / valor para almacenar valores en una tabla hash. Es un mapa no sincronizado, lo que significa que no es seguro para subprocesos y no se puede compartir entre varios subprocesos sin la sincronización adecuada.

¿Qué es Hashtable?

A diferencia de HashMap, Hashtable es un mapa sincronizado y es seguro para subprocesos, lo que significa que puede compartirse entre varios subprocesos. En Hashtable, especifica un objeto que se puede usar como clave y el valor que va con la clave. A Hashtable asigna claves a valores con la ayuda de una función hash. Java proporciona esta función en la forma del método hashcode () de Object, que las clases anulan para proporcionar códigos hash apropiados. A diferencia de HashMap, Hashtable no admite valores nulos y claves nulas porque hay una comprobación nula en la implementación del método put de Hashtable.

Diferencia entre HashMap y Hashtable

  1. Conceptos básicos de HashMap vs. Tabla de picadillo

Ambas son colecciones basadas en hash en Java utilizadas para almacenar datos en pares clave / valor. HashMap es una implementación de mapa basada en una tabla hash que proporciona un rendimiento de tiempo constante para insertar y localizar pares. El rendimiento se puede ajustar con el uso de constructores que le permiten establecer la capacidad y el factor de carga de la tabla hash. El Hashtable básico es bastante similar al HashMap, incluso con los nombres de los métodos. Almacena el par clave / valor en la tabla hash. En Hashtable, especifica un objeto que se puede usar como clave y el valor que va con la clave.

  1. Sincronización de HashMap vs. Tabla de picadillo

Tanto HashMap como Hashtable utilizan técnicas de hashing para almacenar valores basados ​​en la clave. Al igual que HashMap, Hashtable usa pares clave / valor para almacenar valores en una tabla hash. Sin embargo, la diferencia clave entre los dos es la sincronización. HashMap es un mapa no sincronizado, mientras que Hashtable es un mapa sincronizado. Esto significa que HashMap no es seguro para subprocesos y no se puede compartir entre varios subprocesos sin el código de sincronización adecuado. Por el contrario, Hashtable es seguro para subprocesos y se puede compartir entre varios subprocesos. Hashtable es más rápido que usar un HashMap en un contenedor sincronizado, si necesita usar un Mapa sincronizado.

  1. Claves nulas y valores nulos para HashMap vs. Tabla de picadillo

La clase HashMap proporciona una implementación de mapa que se basa en una estructura de datos Hashtable. Esta implementación es compatible con todas las operaciones de Map y permite múltiples valores nulos pero solo una clave nula para que pueda mantener propiedades de clave únicas. Sin embargo, no garantiza el orden en que se almacenan las entradas. La Hashtable, por otro lado, asigna claves a valores con la ayuda de una función hash. A diferencia de HashMap, Hashtable no admite valores nulos y claves nulas porque hay una comprobación nula en la implementación del método put de Hashtable.

  1. Rendimiento de HashMap vs. Tabla de picadillo

Debido a que HashMap no es un mapa sincronizado, es mucho más rápido y mejor que un Hashtable en términos de rendimiento y, de hecho, usa menos memoria que Hashtable. Aunque son prácticamente idénticos, Hashtable es un poco más lento que un HashMap pero más rápido que un HashMap sincronizado. Inherentemente, no es seguro usar Hashtable con acceso multiproceso porque solo los métodos están sincronizados. Hashtable es la contraparte sincronizada de HashMap. Los objetos no sincronizados funcionan mejor en comparación con los objetos sincronizados, al igual que un Hashtable tiene un mejor desempeño en un entorno de un solo hilo.

HashMap vs. Hashtable: Cuadro comparativo

Resumen de HashMap vs. Tabla de picadillo

La clase HashMap te ofrece un mapa sin ordenar ni ordenado. Entonces, cuando necesita un Mapa y no le importa el orden en que se almacenan las entradas, entonces HashMap es el camino a seguir.

Hashtable, al igual que Vector, ha sido desde tiempos prehistóricos de Java. Al igual que Vector es una contraparte sincronizada de la ArrayList más moderna y avanzada, Hashtable es la contraparte sincronizada de HashMap. Sin embargo, una clase no se puede sincronizar, por lo que cuando decimos que Hashtable es un mapa sincronizado, significa que los métodos clave de la clase están sincronizados.

Si bien ambos son prácticamente idénticos, la diferencia radica en la forma en que se sincronizan y en cómo funcionan. HashMap se desempeña mejor en un entorno de múltiples subprocesos, mientras que Hashtable funciona mejor en un entorno de un solo subproceso.