java map interface tutorial with implementation examples
Este completo tutorial de mapas de Java cubre cómo crear, inicializar e iterar a través de mapas. También aprenderá sobre métodos de mapas y ejemplos de implementación:
Conocerá los conceptos básicos de la interfaz del mapa, los métodos admitidos por la interfaz del mapa y otros términos específicos relacionados con la interfaz del mapa.
La colección de mapas en Java es una colección que asigna una clave a un valor. Es una colección que consta de claves y valores. Cada entrada en el mapa consta de una clave con su valor correspondiente. Las claves son únicas en los mapas. Los mapas se pueden utilizar normalmente cuando necesitamos modificar una colección en función de un valor clave.
=> Consulte TODOS los tutoriales de Java aquí.
Lo que vas a aprender:
- Mapas en Java
- Métodos de mapas
- Implementación del mapa de Java
- Conclusión
Mapas en Java
El mapa en Java es parte de la interfaz java.util.map. La interfaz del mapa no es parte de la interfaz de la colección y esa es la razón por la cual los mapas son diferentes de las otras colecciones.
La jerarquía general de la interfaz del mapa se muestra a continuación.

Como se muestra arriba, hay dos interfaces para implementar el mapa, es decir, la interfaz del mapa y la interfaz sortedMap. Hay tres clases, a saber, HashMap, TreeMap y LinkedHashMap.
Estos tipos de mapas se describen a continuación:
| Clase | Descripción | |
|---|---|---|
| retirar | V eliminar (tecla de objeto) | Eliminar una entrada de mapa para la clave dada |
| LinkedHashMap | Se extiende desde la clase HashMap. Este mapa mantiene la orden de inserción | |
| HashMap | Implementar una interfaz de mapa. HashMap no mantiene ningún orden. | |
| TreeMap | Implementa la interfaz map y sortedMap. TreeMap mantiene un orden ascendente. |
Puntos para recordar acerca de los mapas.
- En los mapas, cada clave se puede asignar como máximo a un valor. Además, no puede haber claves duplicadas en los mapas.
- Las implementaciones de mapas como HashMap y LinkedHashMap permiten claves nulas y valores nulos. Sin embargo, TreeMap no lo permite.
- No se puede atravesar un mapa tal como está. Por lo tanto, para atravesar, debe convertirse para establecer usando el método keyset () o entrySet ().
Crear un mapa en Java
Para crear un mapa en Java, primero tenemos que incluir la interfaz en nuestro programa. Podemos usar una de las siguientes declaraciones en el programa para importar la funcionalidad del mapa.
|_+_|Necesitamos instanciar una implementación concreta del mapa, ya que es una interfaz.
Las siguientes declaraciones crean un mapa en Java.
|_+_|Las declaraciones anteriores crearán mapas con especificaciones predeterminadas.
También podemos crear mapas genéricos que especifiquen los tipos de clave y valor.
La definición anterior tendrá claves de tipo cadena y objetos como valores.
Inicializar un mapa en Java
Se puede inicializar utilizando los siguientes métodos:
# 1) Uso de colecciones
La clase Colecciones de Java tiene métodos de fábrica que se pueden utilizar para inicializar colecciones, incluidos mapas.
Algunos métodos utilizados para inicializar el mapa son los siguientes:
(1) Colecciones.EmptyMap ()
Collections.EmptyMap () devuelve un mapa serializable e inmutable que está vacío. Por ejemplo, la siguiente línea de código,
|_+_|Esto creará un mapa vacío. El método anterior puede arrojar 'advertencia de asignación no verificada' y, por lo tanto, también podemos usar el formulario de seguridad de tipos de la siguiente manera.
|_+_|(2) Colecciones.unModifiableMap ()
El método unModifiableMap () toma otro mapa como argumento y crea una vista no modificable del mapa original.
|_+_|(3) Colecciones.singletonMap ()
La clase Colecciones también proporciona un método de fábrica 'singletonMap ()' que crea un mapa singleton inmutable que tiene solo una entrada.
|_+_|# 2) Usando Java 8
Podemos obtener un flujo de datos de los métodos de API de flujo de Java 8 y construir mapas utilizando recopiladores.
Algunos de los métodos para construir mapas son:
(1) Collectors.toMap ()
Recopilamos un flujo y luego usamos el método Collectors.toMap () para construir un mapa.
|_+_|La declaración anterior crea un mapa de la secuencia de Java 8.
(2) Collectors.collectingAndThen ()
En esto, adaptamos el método toMap () que permite al recolector producir un mapa inmutable usando el método collectAndThen ().
|_+_|# 3) Usando el método put de la interfaz del mapa
El método put () de la interfaz del mapa se puede utilizar para asignar valores iniciales a los mapas.
# 4) Uso de la inicialización de doble refuerzo
La técnica de 'inicialización de doble llave' crea una clase interna. Esta clase es anónima y tiene un inicializador de instancia. Esta no es una técnica preferida y debe evitarse ya que puede provocar pérdidas de memoria o problemas de serialización.
El siguiente programa muestra los diversos métodos para inicializar un mapa discutidos anteriormente.
|_+_|Producción:
Valores del mapa no modificables: {}
singleton_map Valores del mapa: {10 = TEN}
Valores de map_cities: {CH = Chennai, DL = Nueva Delhi, MH = Mumbai}
capitals_Map valores: {MAH = Mumbai, GOA = Panaji, KAR = Bangaluru}
Valores del mapa: {EE. UU. = Washington, GER = Berlín, Reino Unido = Londres, IND = Delhi}

Iterar sobre el mapa en Java e imprimir el mapa
Podemos atravesar el mapa de la misma manera en que atravesamos las otras colecciones. Además de atravesar las entradas del mapa, también podemos atravesar solo las claves o solo los valores en el mapa. Tenga en cuenta que para recorrer un mapa, primero debe convertirlo para configurarlo.
Los siguientes métodos se utilizan para recorrer las entradas del mapa.
Usando el iterador de entrada
En este método, obtenemos un iterador de entrada de un conjunto de entradas. Luego, utilizando los métodos getKey y getValue, recuperamos el par clave-valor para cada entrada de mapa.
El siguiente programa muestra el uso de un iterador de entrada.
|_+_|Producción:
Las entradas del mapa son:
VALOR CLAVE
CH Chennai
DL Nueva Delhi
MH Mumbai

En el programa anterior, obtenemos un iterador de entrada del mapa usando el método entrySet. Luego recorremos el mapa usando el método hasNext () del iterador de entrada e imprimimos el par clave-valor.
Usar una entrada para cada bucle
Aquí recorremos el entrySet usando for-each loop y la implementación se muestra a continuación.
|_+_|Producción:
Las entradas del mapa son:
VALOR CLAVE
CH Chennai
DL Nueva Delhi
MH Mumbai

Métodos de mapas
La interfaz de mapa en Java admite varias operaciones similares a las admitidas por otras colecciones. En esta sección, discutiremos los diversos métodos proporcionados por Map API en Java. Como el alcance de este tutorial se limita a introducir una interfaz de mapa en general, no describiremos estos métodos.
Discutiremos estos métodos en detalle mientras hablamos de las clases de interfaz de mapa.
La siguiente tabla enumera todos los métodos proporcionados por la API de mapas.
| Nombre del método | Prototipo de método | Descripción |
|---|---|---|
| obtener | V get (clave de objeto) | Devuelve el objeto o valor de la clave dada. |
| poner | V put (clave de objeto, valor de objeto) | Insertar entrada de valor-clave en el mapa |
| poner todo | void putAll (mapa del mapa) | Insertar entradas de mapa dadas en el mapa. En otras palabras, copia o clona un mapa. |
| juego de llaves | Establecer keySet () | Devuelve la vista configurada del mapa. |
| entrySet | Colocar | Devuelve establece la vista para un mapa dado |
| valores | Valores de colección () | Devuelve la vista de colección de los valores en el mapa. |
| Talla | int tamaño () | Devuelve el número de entradas en el mapa. |
| claro | vacío claro () | Limpia el mapa |
| esta vacio | boolean isEmpty () | Comprueba si el mapa está vacío y devuelve verdadero en caso afirmativo. |
| containsValue | boolean containsValue (valor del objeto) | Devuelve verdadero si el mapa contiene el valor igual al valor dado |
| contiene clave | boolean containsKey (clave de objeto) | Devuelve verdadero si existe una clave dada en el mapa |
| es igual a | booleano es igual a (Objeto o) | Compara el objeto especificado o con el mapa |
| código hash | int hashCode () | devuelve el código hash del mapa |
| para cada | void forEach (acción BiConsumer) | Realiza una acción determinada para cada entrada en el mapa |
| getOrDefault | V getOrDefault (clave de objeto, V defaultValue) | Devuelve el valor especificado para la clave dada o su valor predeterminado si la clave no está presente |
| retirar | boolean remove (clave de objeto, valor de objeto) | Elimina claves y valores especificados |
| reemplazar | Reemplazo de V (tecla K, valor de V) | Reemplaza la clave dada con el valor especificado |
| reemplazar | reemplazo booleano (tecla K, V oldValue, V newValue) | Reemplaza el valor anterior con un valor nuevo para una clave determinada |
| reemplaza todo | void replaceAll (función BiFunction) | Invoca la función dada para reemplazar todas las entradas del mapa |
| putIfAbsent | V putIfAbsent (tecla K, valor V) | Inserta la clave dada, valor solo si aún no está presente |
| calcular | V compute (tecla K, función de reasignación de BiFunction) | Calcula el mapeo para la clave y el valor especificados dada la función de mapeo. |
| computeIfAbsent | V computeIfAbsent (tecla K, función de mapeo de funciones) | Calcule el valor de la clave dada usando la función de mapeo si aún no está presente. |
| computeIfPresent | V computeIfPresent (tecla K, función de reasignación BiFunction) | Calcula una nueva asignación para la clave dada con la función de reasignación dada si el valor de la clave ya está presente |
| Vamos | V fusionar (tecla K, valor V, función de reasignación de BiFunction) | Asocia una clave determinada con el valor si aún no está asociado o está asociado con el valor nulo. |
Todos los métodos anteriores son compatibles con la interfaz del mapa. Tenga en cuenta que los métodos que aparecen sombreados son los nuevos métodos que se incluyeron en Java 8.
Implementación del mapa de Java
El siguiente programa implementa un ejemplo de mapa en Java. Aquí usamos la mayoría de los métodos discutidos anteriormente.
El ejemplo muestra varias operaciones get, put y set.
|_+_|Producción:
Clave = CHN, Valor: China
Clave = XX, Valor: nulo
null keyExists: verdadero, null valueExists = true
conjunto de entradas para country_map: (null = Z, XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Korea)
Tamaño del mapa_país: 6
data_map mapeado a country_map: {null = Z, XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Kore
a}
valor de clave nulo para data_map: Z
data_map después de eliminar la clave nula = {XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Korea}
claves del mapa de datos: (nulo, XX, CHN, SL, IND, KOR)
valores del mapa de datos: (Z, null, China, Srilanka, India, Korea)
mapa de datos después de la operación clara, está vacío: verdadero

Ordenar un mapa en Java
Como un mapa consta de pares clave-valor, podemos ordenar el mapa por claves o valores.
En esta sección, ordenaremos un mapa tanto por claves como por valores.
Ordenar por clave
Para ordenar un mapa por claves, podemos usar un mapa de árbol. El mapa de árbol ordena las claves automáticamente. El siguiente programa Java convierte un mapa en un mapa de árbol y muestra las claves ordenadas.
|_+_|Producción:
Mapa original sin clasificar:
América
C China
D Dinamarca
X Hongkong
Yo india
Mapa ordenado por clave:
América
C China
D Dinamarca
Yo india
X Hongkong

El programa anterior crea un mapa que consta de un solo código alfabético como claves y nombres de países como valores. Primero, mostramos el mapa original que no está ordenado. Luego, convertimos el mapa en un mapa de árbol que ordena automáticamente las claves. Finalmente, mostramos el mapa de árbol ordenado en las claves.
Ordenar por valor
Para ordenar un mapa según los valores, primero convertimos el mapa en una lista. Luego ordenamos esta lista usando el método Collections.sort () que usa un comparador para comparar los valores y organizarlos en un orden específico.
Una vez que la lista está ordenada, las entradas de la lista enlazada se copian nuevamente al mapa, lo que nos da el mapa ordenado.
El siguiente programa Java demuestra la clasificación de un mapa en función del valor. El programa usa LinkedHashMap que se pasa a la función de clasificación. En la función de clasificación, se convierte en una lista vinculada y se ordena. Después de ordenarlo, se vuelve a convertir a LinkedHashMap.
herramientas de prueba de seguridad para aplicaciones web|_+_|
Producción:
Mapa original sin clasificar:
{NEP = Katmandú, IND = Nueva Delhi, EE. UU. = Washington, Reino Unido = Londres, AUS = Canberra
Mapa ordenado por valor:
Valor clave
DESDE Canberra
NEP Katmandú
Reino Unido Londres
IND Nueva Delhi
Estados Unidos Washington

Mapa concurrente en Java
Un concurrentMap es una interfaz que hereda de la interfaz java.util.map. La interfaz concurrentMap se introdujo por primera vez en JDK 1.5 y proporciona un mapa que maneja el acceso concurrente.
La interfaz concurrentMap es parte del paquete java.util.concurrent.
El siguiente programa Java demuestra el concurrentMap en Java.
|_+_|Producción:
Mapa concurrente inicial: {100 = rojo, 101 = verde, 102 = azul}
Después de agregar la clave 103 ausente: {100 = rojo, 101 = verde, 102 = azul, 103 = púrpura}
Mapa concurrente después de eliminar 101: {100 = rojo, 102 = azul, 103 = púrpura}
Agregue la clave ausente 101: {100 = rojo, 101 = marrón, 102 = azul, 103 = púrpura}
Reemplazar el valor en la clave 101: {100 = Rojo, 101 = Verde, 102 = Azul, 103 = Púrpura}

Mapa sincronizado en Java
Un mapa sincronizado es un mapa que es seguro para subprocesos y está respaldado por un mapa determinado. En Java, el mapa sincronizado se obtiene utilizando el método synchronizedMap () de la clase java.util.Collections. Este método devuelve un mapa sincronizado para un mapa determinado.
Este mapa sincronizado devuelto se utiliza para acceder al mapa de respaldo para lograr el acceso en serie.
La declaración general del método synchronizedMap () es:
|_+_|donde m => es el mapa respaldado.
Como ya se mencionó, este método devuelve la vista sincronizada del mapa m.
El siguiente programa Java es un ejemplo de un mapa sincronizado.
|_+_|Producción:
Mapa original (con respaldo): {1 = 10, 2 = 20, 3 = 30, 4 = 40, 5 = 50}
Mapa sincronizado después de eliminar (3, 30): {1 = 10, 2 = 20, 4 = 40, 5 = 50}

Mapa estático en Java
Un mapa estático en Java es un mapa que se declara estático como una variable estática. Al declarar un mapa estático, se convierte en una variable de clase accesible sin usar el objeto.
Hay dos enfoques para crear e inicializar un mapa estático en Java.
# 1) Usando una variable estática
Aquí, creamos una variable de mapa estática y la instanciamos junto con la declaración.
Este enfoque se demuestra en el siguiente programa Java.
|_+_|Producción:
Mapa estático con variable de mapa estático:
{1 = India, 2 = Portugal, 3 = Alemania}

# 2) Uso de bloque estático
En esto, creamos una variable de mapa estática. Luego creamos un bloque estático y dentro de este bloque estático, inicializamos la variable del mapa.
El programa siguiente demuestra esto.
|_+_|Producción:
Mapa estático usando bloque estático:
{1 = rojo, 2 = verde, 3 = azul}

Conversión de la lista a mapa
En esta sección, discutiremos los métodos para convertir la lista en un mapa.
Los dos métodos incluyen:
Método tradicional
En el método tradicional, cada elemento de la lista se copia al mapa usando un bucle for-each.
Esta implementación se muestra a continuación:
|_+_|Producción:
La lista dada: (rojo, verde, azul, marrón, blanco)
Mapa generado a partir de la lista: {1 = rojo, 2 = verde, 3 = azul, 4 = marrón, 5 = blanco}

Lista para mapear en Java 8
También podemos usar el método Collectors.mapOf () de Java 8 que convertirá la lista dada en un mapa.
El siguiente programa demuestra esto.
|_+_| Producción:
Mapa obtenido de la lista: {1 = Ábaco, 2 = Matemáticas, 3 = Física, Química}

En este programa, tenemos una clase Subject que actúa como una clase de lista. La clase Asunto tiene dos campos, es decir, sub_id y sub_name. Tenemos métodos para leer los valores de campo de la clase. En la función principal, creamos objetos de esta clase y construimos una lista.
Luego, esta lista se convierte en el mapa mediante el método Collectors.MapOf que toma los elementos uno por uno. También toma sub_Id como clave para el mapa. Finalmente, se genera el mapa que tiene sub_Id como clave y Sub_Name como valor.
Convertir mapa a cadena en Java
Una colección de mapas se puede convertir en una cadena mediante dos enfoques:
Usando StringBuilder
Aquí creamos un objeto StringBuilder y luego copiamos los pares clave-valor del mapa en el objeto StringBuilder. Luego convertimos el objeto StringBuilder en una cadena.
El siguiente programa muestra el código Java para convertir el mapa a la cadena.
|_+_|Producción:
El mapa dado: {20 = veinte, 40 = cuarenta, 10 = diez, 30 = treinta}
La representación de cadena del mapa:
{20 = veinte, 40 = cuarenta, 10 = diez, 30 = treinta}

Uso de secuencias de Java 8
En este método, creamos una secuencia a partir de las claves del mapa y luego la convertimos en la cadena.
El programa que se proporciona a continuación muestra la conversión del mapa a una cadena mediante secuencias.
|_+_|Producción:
El mapa dado: {20 = veinte, 40 = cuarenta, 10 = diez, 30 = treinta}
La representación de cadena del mapa:
{20 = veinte, 40 = cuarenta, 10 = diez, 30 = treinta}

Convertir mapa a lista en Java
Un mapa consta de claves y valores, mientras que una lista es una secuencia de elementos individuales. Al convertir el mapa en una lista, generalmente convertimos las claves en una lista de claves y los valores en una lista de valores.
El siguiente programa Java muestra esta conversión.
|_+_|Producción:
Lista de claves del mapa dado:
(50, 20, 40, 10, 30)
Lista de valores del mapa dado:
(magenta, verde, cian, rojo, azul)
sitios de anime gratis para ver en línea

Diccionario vs. Mapa en Java
Analicemos algunas de las principales diferencias entre un diccionario y un mapa en Java.
| Diccionario | Mapa |
|---|---|
| El diccionario es una clase abstracta. | El mapa es una interfaz. |
| Las clases y métodos utilizados por la clase de diccionario son anteriores al marco de colecciones. | Las clases y los métodos utilizados por las clases de mapas son parte del marco de la colección. |
| Si una clase extiende el diccionario, no puede extender ninguna otra clase, ya que Java solo admite herencia única. | El mapa es una interfaz, por lo que una clase puede heredar del mapa y otras interfaces |
| Implementación antigua. Casi obsoleto en las versiones más nuevas de Java. | La interfaz del mapa ha reemplazado la implementación del diccionario. |
Preguntas frecuentes
P # 1) ¿Por qué usamos una interfaz de mapa en Java?
Responder: El mapa es una interfaz en Java que se implementa mediante clases que almacenan datos como pares clave-valor. La interfaz de mapa proporciona operaciones / métodos que se pueden realizar en pares clave-valor como inserción, actualización, eliminación, etc.
Q #2)¿Qué significa MAP en Java?
Responder: Un mapa en Java representa un mapeo de una clave con un valor específico. Un mapa de Java almacena estos pares clave-valor en un mapa. Podemos buscar y recuperar el valor asociado con una clave simplemente usando la clave en el mapa.
Un mapa se implementa en Java mediante una interfaz que no forma parte de la interfaz de Colección. Pero el mapa es una colección.
Q #3)¿Qué es MAP?
Responder: Get () es un método proporcionado por una interfaz de mapa en Java que se utiliza para recuperar el valor asociado con una clave particular proporcionada como argumento del método get (). Si el valor no está presente, se devuelve un valor nulo.
Q #4)¿El mapa es una colección?
Responder: Aunque el mapa se ve como una colección en general, no implementa una interfaz de colección. Algunas de las implementaciones de map, como treemap, no admiten valores nulos o claves.
Q #5)¿Cuál es la diferencia entre set y map?
Responder: El conjunto es una colección de claves únicamente, mientras que el mapa es una colección de pares clave-valor. Si bien el conjunto no permite valores nulos, algunas de las implementaciones de mapas permiten valores nulos.
El conjunto no permite claves duplicadas. El mapa puede permitir valores duplicados, pero las claves deben ser únicas. Set se suele utilizar cuando queremos almacenar una colección de elementos únicos. El mapa se puede utilizar cuando necesitamos almacenar datos en forma de pares clave-valor.
Conclusión
En este tutorial, hemos discutido los conceptos básicos de la interfaz del mapa. También hemos visto los diversos métodos y todos los demás detalles relacionados con la interfaz del mapa en Java. Llegamos a saber que hay varias implementaciones de interfaces de mapas, incluidos mapas de árbol, mapas de hash, etc.
En nuestros próximos tutoriales, analizaremos la implementación de este mapa con más detalle.
=> Visite aquí para aprender Java desde cero.
Lectura recomendada
- ¿Qué es un HashMap en Java?
- TreeMap en Java - Tutorial con ejemplos de Java TreeMap
- LinkedHashMap en Java - Ejemplo e implementación de LinkedHashMap
- Establecer interfaz en Java: Tutorial de conjunto de Java con ejemplos
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- Tutorial de pila de Java: implementación de la clase de pila con ejemplos
- Tutorial de reflexión de Java con ejemplos
- Matriz irregular en Java - Tutorial con ejemplos