HashMap y HashSet

Anonim

Cuando aprendes un nuevo lenguaje informático, una de las primeras cosas que tiendes a preguntar es cómo trabajar con grandes grupos de datos. Este tema a menudo se trata en el tema "Estructuras de datos". Si profundiza, debe abordar temas como listas vinculadas, colas, pilas y árboles binarios entre muchas otras estructuras de datos. En Java, estas estructuras forman parte del Java Collections Framework. Una colección no es más que un tipo de estructura de datos que se refiere a una agrupación de múltiples elementos de datos y el Java Collections Framework estandariza la forma en que se manejan estos grupos de objetos. De hecho, el marco de colecciones fue diseñado para cumplir con varios objetivos.

Todo el marco de colecciones está diseñado en torno a un conjunto de interfaces estándar. Varias interfaces estándar, tales como LinkedList, HashSet y TreeSet, son proporcionadas por estas interfaces como usted puede. Además, también puede implementar su propia colección si lo desea. Sin embargo, además de las colecciones, el marco define varias interfaces y clases de mapas. Java contiene tres implementaciones de mapas de propósito general, HashMap, TreeMap y LinkedHashMap, que almacenan pares clave / valor. Aunque los mapas no son técnicamente colecciones, están completamente integrados con las colecciones. De hecho, los mapas se centran en grupos de asociación entre objetos. Este artículo resume las diferencias clave entre HashMap y HashSet.

¿Qué es un HashMap?

HashMap es la implementación más utilizada de la interfaz de Map, que proporciona un mapa básico de clave / valor donde los elementos no están ordenados. Utiliza un valor especial llamado código hash, en lugar de una búsqueda lenta de la clave. El código hash es una forma de tomar información en el objeto en cuestión y convertirlo en un int "relativamente único" para ese objeto. Simplemente funciona según el principio de hash, lo que significa que utiliza una función de hash para asignar valores de identificación. Al igual que Vector y Stack tienen sus reemplazos en ArrayList y LinkedList, Hashtable tiene un reemplazo en HashMap. Extiende AbstractMap para implementar la interfaz de Map mediante una representación interna de Hashtable. Y similar a otras implementaciones de propósito general, HashMap admite los métodos opcionales de Map, permite valores nulos y no está sincronizado.

¿Qué es un HashSet?

HashSet es uno de los miembros de Java Collections Framework que implementa la interfaz Set, respaldada por una tabla hash que, de hecho, es una instancia de HashMap. Como su nombre lo indica, se implementa mediante una tabla hash, una matriz en la que los elementos se almacenan en una posición derivada de su contenido. A diferencia de un mapa, Set es exactamente una colección con exactamente la misma interfaz, por lo que no hay ninguna funcionalidad adicional como la que hay con dos listas diferentes. HashSet utiliza una función de hashing que está diseñada específicamente para búsquedas rápidas. Es una colección desordenada de objetos únicos que no pueden almacenar valores duplicados. HashSet extiende la clase AbstractSet que implementa la interfaz Set. Sin embargo, HashSet no define ningún método adicional que no sean los proporcionados por sus superclases e interfaces.

Diferencia entre HashMap y HashSet

  1. BASIC

HashMap es la implementación más utilizada de la interfaz de Map, que proporciona un mapa básico de clave / valor donde los elementos no están ordenados. Simplemente funciona según el principio de hash, lo que significa que utiliza una función de hash para asignar valores de identificación. HashSet, por otro lado, es uno de los miembros de Java Collections Framework que implementa la interfaz Set, respaldada por una tabla hash que en realidad es una instancia de HashMap. En pocas palabras, HashMap implementa la interfaz de Map, mientras que HashSet implementa la interfaz Set.

  1. Funcionalidad

HashSet crea una colección que utiliza una tabla hash para el almacenamiento. La tabla de hash almacena información usando un método llamado hashing. HashSet utiliza una función de hashing, que está diseñada específicamente para búsquedas rápidas, para almacenar elementos o valores. La mayor parte de la funcionalidad de HashSet se proporciona a través de la superclase AbstractCollection y AbstractSet, que HashSet comparte con TreeSet. HashMap extiende AbstractMap para implementar la interfaz de Map usando una representación interna de Hashtable. Ambas clases no están sincronizadas, lo que significa que no son adecuadas para operaciones seguras de subprocesos.

  1. Valores duplicados

Debido a que Map no admite claves duplicadas, HashMap no permite claves duplicadas, pero sí puede tener valores duplicados. Esto significa que pueden existir valores duplicados en HashMap, pero puede usar la recopilación como valor contra alguna clave. Cada clave debe ser única en un HashMap y no se puede permitir que una sola clave tenga más de 1 valor. HashSet, por otro lado, no puede tener elementos duplicados por la mera definición de un Conjunto, lo que significa que no puede almacenar valores duplicados en HashSet. HashMap solo permite una clave nula, pero permite cualquier número de valores nulos, mientras que HashSet solo permite un valor nulo.

  1. Mecanismo de almacenamiento

HashMap funciona según el principio de hash, lo que significa que utiliza una función de hash para mapear valores de identificación internamente utilizando el algoritmo de hashing para permitir una fácil recuperación. Un verdadero mecanismo de hashing siempre devuelve el mismo código hash () cuando se aplica al mismo objeto. HashSet, por otro lado, utiliza internamente HashMap como una estructura de datos de respaldo para agregar o almacenar objetos. Esto significa que cuando se crea un objeto de HashSet, creará un objeto de HashMap.

HashMap vs. HashSet: Cuadro comparativo

Resumen de HashMap vs. HashSet

Aunque tanto HashMap como HashSet no están sincronizados, lo que significa que no son adecuados para operaciones seguras de subprocesos y son construcciones completamente diferentes, proporcionan un rendimiento constante en el tiempo para operaciones básicas como agregar, eliminar elementos, etc. Mientras que HashMap es una implementación de propósito general de la interfaz del Mapa que almacena pares clave / valor, HashSet es una implementación de la interfaz Set. Un HashSet usa un HashMap para respaldar su implementación. Un HashMap, sin embargo, utiliza el principio de hash y lo utiliza para buscar rápidamente la clave.