what is hashmap java
Este tutorial de Java HashMap explica qué es un HashMap en Java y cómo usarlo. Incluye cómo declarar, inicializar, iterar, implementar e imprimir HashMap:
HashMap en Java es una colección basada en Map y consta de pares clave-valor. Un HashMap se indica con o. Se puede acceder a un elemento HashMap usando una clave, es decir, debemos conocer la clave para acceder al elemento HashMap.
Un HashMap utiliza una técnica llamada 'Hashing'. En hash, una cadena más larga se convierte en una cadena más corta aplicando algún algoritmo o 'función hash'. Una cadena se convierte en una cadena más corta, ya que ayuda a buscar más rápido. También se utiliza para una indexación eficiente.
=> Visite aquí para ver la serie exclusiva de tutoriales de capacitación en Java.
Lo que vas a aprender:
- HashMap en Java
- Java Map Vs HashMap
- Conclusión
HashMap en Java
Un HashMap es similar a HashTable con la diferencia de que HashMap no está sincronizado y permite valores nulos para la clave y el valor.
Algunas de las características importantes de HashMap se detallan a continuación:
- HashMap se implementa en Java en la clase 'Hashmap' que es parte del paquete java.util.
- La clase HashMap hereda de la clase 'AbstractMap' que implementa parcialmente la interfaz Map.
- HashMap también implementa interfaces 'clonables' y 'serializables'.
- HashMap permite valores duplicados pero no permite claves duplicadas. HashMap también permite múltiples valores nulos, pero una clave nula puede ser solo una.
- HashMap no está sincronizado y tampoco garantiza el orden de los elementos.
- La clase Java HashMap tiene una capacidad inicial de 16 y el factor de carga predeterminado (inicial) es 0,75.
¿Cómo declarar un HashMap en Java?
Un HashMap en Java es parte del paquete java.util. Por lo tanto, si necesitamos usar HashMap en nuestro código, primero debemos importar la clase de implementación usando una de las siguientes declaraciones:
|_+_|O
|_+_|La declaración general de la clase HashMap es:
|_+_|Aquí, K => tipo de claves presentes en el mapa
V => tipo de valores asignados a las claves en el mapa
Crear un HashMap
Se puede crear un HashMap en Java de la siguiente manera:
|_+_|La declaración anterior primero incluye la clase HashMap en Java. Luego, en la siguiente declaración, creamos un HashMap llamado 'cities_map' con el tipo de clave como Integer y Values como String.
Una vez creado el HashMap, necesitamos inicializarlo con valores.
¿Cómo inicializar el mapa hash?
Podemos inicializar el HashMap usando el método put poniendo algunos valores en el mapa.
El siguiente programa muestra la inicialización de HashMap en Java.
|_+_|Producción:
Mapa inicial: {}
Después de agregar elementos:
100 Red
101 Verde
102 Azul

¿Cómo funciona un HashMap internamente?
Sabemos que HashMap es una colección de pares clave-valor y utiliza una técnica llamada 'Hashing'. Internamente, HashMap es una matriz de nodos. HashMap hace uso de matriz y LinkedList para almacenar pares clave-valor.
A continuación se muestra una estructura de un nodo de HashMap que se representa programáticamente como una clase.

Como se ve en la representación de nodo anterior, un nodo tiene una estructura similar a un nodo de lista enlazada. Una matriz de estos nodos se llama Bucket. Es posible que cada depósito no tenga la misma capacidad y también puede tener más de un nodo.
El rendimiento de HashMap está influenciado por dos parámetros:
(i) Capacidad inicial: La capacidad se define como la cantidad de depósitos en HashMap. La capacidad inicial se define como la capacidad del objeto HashMap cuando se crea. La capacidad del HashMap siempre se multiplica por 2.
(ii) LoadFactor: LoadFactor es el parámetro que mide cuando se vuelve a hacer el refrito: se aumentará la capacidad.
Tenga en cuenta que si la capacidad es alta, el factor de carga será pequeño, ya que no se requerirá un refrito. De manera similar, cuando la capacidad es baja, el factor de carga será alto, ya que necesitaremos refrito con frecuencia. Por lo tanto, debemos tener cuidado de elegir cuidadosamente estos dos factores para diseñar un hashMap eficiente.
¿Cómo iterar un HashMap?
El HashMap debe atravesarse para manipular o imprimir los pares clave-valor.
Hay dos formas en las que podemos recorrer o iterar a través del HashMap.
- Usando for loop
- Usando el bucle while y el iterador.
El programa Java a continuación muestra la implementación de ambos métodos.
Primero, recuperamos el conjunto de entradas de HashMap usando el método entrySet y luego atravesamos el conjunto usando el bucle for. Luego imprimimos los pares clave-valor usando los métodos getKey () y getValue () respectivamente.
Para recorrer el HashMap usando un bucle while, primero configuramos un iterador para HashMap y luego accedemos a los pares clave-valor usando el iterador.
|_+_|Producción:
HashMap usando for Loop:
VALOR CLAVE
1 DL
3 LARGO
20 PUN
7 GOA
10 mamá
HashMap usando while Loop:
VALOR CLAVE
1 DL
3 LARGO
20 PUN
7 GOA
10 mamá

Imprimir un mapa hash
Veamos otro ejemplo de impresión de hashMap usando el bucle foreach que se muestra en el programa siguiente.
|_+_|Producción:
Contenido de HashMap:
VALOR CLAVE
Red 1
Magenta 8
Naranja 5

Constructor HashMap / Métodos en Java
Las siguientes tablas muestran los constructores y métodos proporcionados por la clase HashMap en Java.
Constructores
| Prototipo de constructor | Descripción | |
|---|---|---|
| poner todo | void putAll (mapa del mapa) | Inserta elementos de 'mapa' especificados en el HashMap. |
| HashMap () | Constructor predeterminado. | |
| HashMap (Mapa m) | Crea un nuevo HashMap a partir del objeto de mapa dado m. | |
| HashMap (capacidad int) | Crea un nuevo HashMap con la capacidad inicial dada por el argumento 'capacidad'. | |
| HashMap (capacidad int, factor de carga flotante) | Crea un nuevo HashMap usando los valores de capacidad y loadFactor proporcionados por el constructor. |
Métodos
| Método | Prototipo de método | Descripción |
|---|---|---|
| claro | vacío claro () | Borra todas las asignaciones en HashMap |
| esta vacio | boolean isEmpty () | Comprueba si el HashMap está vacío. Devuelve verdadero si es así. |
| clon | Clonar objeto () | Devuelve una copia superficial sin clonar las asignaciones de claves y valores en HashMap. |
| entrySet | Establecer entrySet () | Devuelve asignaciones en HashMap como una colección |
| juego de llaves | Establecer keySet () | Devuelve un conjunto de claves en HashMap. |
| poner | V put (clave de objeto, valor de objeto) | Inserta una entrada de valor-clave en HashMap. |
| putIfAbsent | V putIfAbsent (tecla K, valor V) | Inserta el par clave-valor dado en el HashMap si aún no está presente. |
| retirar | V eliminar (tecla de objeto) | Elimina una entrada del HashMap para la clave dada. |
| retirar | eliminación booleana (clave de objeto, valor de objeto) | Elimina el par clave-valor dado del HashMap. |
| calcular | V compute (tecla K, función de reasignación de BiFunction) | Calcula el mapeo usando la 'función de reasignación' para la clave dada y su valor actual o valor nulo. |
| Método | Prototipo de método | Descripción |
| computeIfAbsent | V computeIfAbsent (tecla K, función de mapeo de funciones) | Calcula el mapeo usando la 'función de mapeo' e inserta pares clave-valor si aún no está presente o es nulo. |
| computeIfPresent | V computeIfPresent (tecla K, función de reasignación BiFunction) | Calcula una nueva asignación usando la 'función de remapping' dada la clave si la clave ya está presente y no es nula. |
| containsValue | boolean containsValue (valor del objeto) | Comprueba si el valor dado existe en el HashMap y devuelve verdadero en caso afirmativo. |
| contiene clave | boolean containsKey (clave de objeto) | Comprueba si la clave dada está presente en el HashMap y devuelve verdadero en caso afirmativo. |
| es igual a | booleano es igual a (Objeto o) | Compara el objeto dado con HashMap. |
| para cada | void forEach (acción BiConsumer) | Ejecuta la 'acción' dada para cada una de las entradas en el HashMap. |
| obtener | V get (clave de objeto) | Devuelve el objeto que contiene la clave dada con el valor asociado. |
| getOrDefault | V getOrDefault (clave de objeto, V defaultValue) | Devuelve el valor al que se asigna la clave dada. Si no está asignado, devuelve el valor predeterminado. |
| esta vacio | boolean isEmpty () | Comprueba si el HashMap está vacío. |
| Vamos | V fusionar (tecla K, valor V, función de reasignación de BiFunction) | Comprueba si la clave dada es nula o no está asociada con el valor y luego la asocia con un valor no nulo usando remappingFunction. |
| reemplazar | Reemplazo de V (tecla K, valor de V) | Reemplaza el valor dado para la clave especificada. |
| reemplazar | reemplazo booleano (tecla K, V oldValue, V newValue) | Reemplaza el valor anterior de la clave dada con el nuevo valor |
| reemplaza todo | void replaceAll (función BiFunction) | Ejecuta la función dada y reemplaza todos los valores en el HashMap con el resultado de la función. |
| valores | Valores de colección () | Devuelve la colección de valores presentes en HashMap. |
| Talla | int tamaño () | Devuelve el tamaño del número de entradas en el HashMap. |
Implementación de Hashmap
A continuación, implementaremos la mayoría de estas funciones en un programa Java para comprender mejor su funcionamiento.
El siguiente programa Java muestra una implementación de HashMap en Java. Tenga en cuenta que hemos utilizado la mayoría de los métodos que comentamos anteriormente.
|_+_|Producción:
Contenido de HashMap:
VALOR CLAVE
49 Lirio
2 Sevilla
3 Dillon
7 encaje
12 Leo
El valor en el índice 2 es: Sevilla
Hashmap después de la eliminación:
VALOR CLAVE
49 Lirio
2 Sevilla
7 encaje
12 Leo

Ordenar HashMap en Java
En Java, HashMap no conserva el orden. Por lo tanto, necesitamos ordenar los elementos en HashMap. Podemos ordenar los elementos en el HashMap en función de claves o valores. En esta sección, discutiremos ambos enfoques de clasificación.
Ordenar HashMap por claves
|_+_|Producción:
HashMap sin clasificar:
1: Red
3: verde
5: azul
7: cian
23: marrón
9: Magenta
11: amarillo
HashMap ordenado por claves:
1: Red
3: verde
5: azul
7: cian
9: Magenta
11: amarillo
23: marrón

En el programa anterior, vemos que una vez que el mapa hash está definido y poblado con valores, creamos un mapa de árbol a partir de este mapa hash. A medida que el mapa de hash se convierte en un mapa de árbol, sus claves se ordenan automáticamente. Por lo tanto, cuando mostramos este mapa de árbol, obtenemos el mapa ordenado por claves.
Ordenar HashMap por valores
Para ordenar un HashMap según los valores, primero convertimos el hashmap en una LinkedList. Luego usamos el método Collections.sort junto con el comparador para ordenar la lista. Esta lista luego se convierte de nuevo a HashMap. A continuación, se imprime el HashMap ordenado.
|_+_|Producción:
HashMap sin clasificar:
1: V
3: yo
5: B
7: G
9: Y
11: O
13: R
HashMap ordenado por valores:
5: B
7: G
3: yo
11: O
13: R
1: V
9: Y

HashMap concurrente en Java
En HashMap normal, no podremos modificar los elementos en tiempo de ejecución o mientras se realiza la iteración.
La implementación de un mapa concurrente se muestra a continuación:
|_+_|Producción:
ConcurrentHashMap inicial: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap después del iterador: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}

Tenga en cuenta que si hubiéramos realizado la misma operación con HashMap, habría arrojado ConcurrentModificationException.
Java Map Vs HashMap
Tabularicemos algunas de las diferencias entre Map y HashMap en Java.
| Mapa | HashMap |
|---|---|
| Es una interfaz abstracta. | Es una implementación de la interfaz Map. |
| La interfaz debe ser implementada por otras clases para que su funcionalidad esté disponible. | Es una clase concreta y se pueden crear objetos de clase para obtener la funcionalidad. |
| La implementación de la interfaz del mapa como TreeMap no permite valores nulos. | Permite valores y claves nulos. |
| TreeMap no permite valores duplicados. | Puede tener valores duplicados. |
| Se mantiene un orden natural de los objetos. | No se mantiene ningún orden de entrada en HashMap. |
Preguntas frecuentes
P # 1) ¿Por qué se usa HashMap en Java?
Responder: HashMap es la colección de pares clave-valor que ayuda a buscar los datos basándose solo en la clave. Además, como utiliza técnicas de hash, proporciona una búsqueda de datos eficiente.
Q #2)¿Cómo se crea un mapa hash?
Responder: Se puede crear un HashMap creando una instancia de la clase 'HashMap' del paquete java.util. Se puede crear un hashMap con claves de tipo entero y valores de tipo cadena de la siguiente manera:
|_+_|Q #3)¿HashMap está ordenado en Java?
Responder: No, el HashMap no está ordenado en Java. No se usa en Java para ese propósito, pero se usa para almacenar elementos en pares clave-valor.
Q #4)¿HashMap es seguro para subprocesos?
Responder: NO, el hashMap no es seguro para subprocesos en Java.
Q #5)¿Qué es HashMap o ConcurrentHashMap más rápido?
Responder: HashMap es más rápido que ConcurrentHashMap. La razón es que HashMap generalmente opera en un solo hilo, por lo que su rendimiento es bueno. Sin embargo, HashMap concurrente, como su nombre indica, es concurrente y puede funcionar simultáneamente en varios subprocesos.
Conclusión
En este tutorial, entendimos el funcionamiento de HashMap junto con otra variación de HashMap llamada ConcurrentHashMap. Hemos visto constructores, métodos y ejemplos de HashMap. También discutimos ConcurrentHashMap junto con su ejemplo.
cómo obtener la llave de seguridad para wifi
En nuestros próximos tutoriales, aprenderemos más sobre las colecciones de Java.
=> Consulte aquí para ver los tutoriales de formación de A-Z de Java aquí.
Lectura recomendada
- LinkedHashMap en Java - Ejemplo e implementación de LinkedHashMap
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- TreeMap en Java - Tutorial con ejemplos de Java TreeMap
- ¿Qué es Java Vector | Tutorial de clase de vector de Java con ejemplos
- Tutorial del método Java String contains () con ejemplos
- Cómo ordenar una matriz en Java - Tutorial con ejemplos
- Matriz irregular en Java - Tutorial con ejemplos
- Tutorial de clase de escáner de Java con ejemplos