Saltar al contenido

Interfaz de mapa en Java – GeeksforGeeks

septiembre 23, 2021
gfg 200x200 min

La interfaz Map presente en el paquete java.util representa un mapeo entre una clave y un valor. La interfaz Mapa no es un subtipo de la interfaz Colección. Por tanto, se comporta un poco diferente al resto de tipos de colección. Un mapa contiene claves únicas.

Interfaz de mapa en Java

Ejemplo:

 

import java.util.*;

class HashMapDemo {

    public static void main(String args[])

    {

        Map<String, Integer> hm

            = new HashMap<String, Integer>();

 

        hm.put("a", new Integer(100));

        hm.put("b", new Integer(200));

        hm.put("c", new Integer(300));

        hm.put("d", new Integer(400));

 

        

        for (Map.Entry<String, Integer> me : hm.entrySet()) {

            System.out.print(me.getKey() + ":");

            System.out.println(me.getValue());

        }

    }

}

Producción:


a:100
b:200
c:300
d:400

Realización de varias operaciones usando Interfaz de mapa y Clase HashMap

Dado que Map es una interfaz, solo se puede usar con una clase que implemente esta interfaz. Ahora, veamos cómo realizar algunas operaciones de uso frecuente en un mapa utilizando la clase HashMap ampliamente utilizada. Y también, después de la introducción de Genéricos en Java 1.5, es posible restringir el tipo de objeto que se puede almacenar en el mapa.

1. Agregar elementos: Para agregar un elemento al mapa, podemos usar el método put (). Sin embargo, el orden de inserción no se conserva en el mapa de hash. Internamente, para cada elemento, se genera un hash separado y los elementos se indexan en función de este hash para hacerlo más eficiente.

 

import java.util.*;

class GFG {

    public static void main(String args[])

    {

        

        

        Map<Integer, String> hm1 = new HashMap<>();

 

        

        

        Map<Integer, String> hm2

            = new HashMap<Integer, String>();

 

        

        hm1.put(1, "Geeks");

        hm1.put(2, "For");

        hm1.put(3, "Geeks");

 

        hm2.put(new Integer(1), "Geeks");

        hm2.put(new Integer(2), "For");

        hm2.put(new Integer(3), "Geeks");

 

        System.out.println(hm1);

        System.out.println(hm2);

    }

}

Producción:


{1=Geeks, 2=For, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}

2. Elementos cambiantes: Luego de agregar los elementos si deseamos cambiar el elemento, se puede hacer agregando nuevamente el elemento con el método put (). Dado que los elementos en el mapa se indexan usando las claves, el valor de la clave se puede cambiar simplemente insertando el valor actualizado para la clave que deseamos cambiar.

 

import java.util.*;

class GFG {

    public static void main(String args[])

    {

 

        

        

        Map<Integer, String> hm1

            = new HashMap<Integer, String>();

 

        

        hm1.put(new Integer(1), "Geeks");

        hm1.put(new Integer(2), "Geeks");

        hm1.put(new Integer(3), "Geeks");

 

        System.out.println("Initial Map " + hm1);

 

        hm1.put(new Integer(2), "For");

 

        System.out.println("Updated Map " + hm1);

    }

}

Producción:


Initial Map {1=Geeks, 2=Geeks, 3=Geeks}
Updated Map {1=Geeks, 2=For, 3=Geeks}

3. Eliminar elemento: Para eliminar un elemento del mapa, podemos usar el método remove (). Este método toma el valor de la clave y elimina la asignación de una clave de este mapa si está presente en el mapa.

 

import java.util.*;

class GFG {

 

    public static void main(String args[])

    {

 

        

        

        Map<Integer, String> hm1

            = new HashMap<Integer, String>();

 

        

        hm1.put(new Integer(1), "Geeks");

        hm1.put(new Integer(2), "For");

        hm1.put(new Integer(3), "Geeks");

        hm1.put(new Integer(4), "For");

 

        

        System.out.println(hm1);

 

        hm1.remove(new Integer(4));

 

        

        System.out.println(hm1);

    }

}

Producción:


{1=Geeks, 2=For, 3=Geeks, 4=For}
{1=Geeks, 2=For, 3=Geeks}

4. Iterando a través del mapa: Hay varias formas de iterar a través del mapa. La forma más famosa es usar un bucle for-each y obtener las claves. El valor de la clave se encuentra utilizando el método getValue ().

 

import java.util.*;

class GFG {

    public static void main(String args[])

    {

 

        

        

        Map<Integer, String> hm1

            = new HashMap<Integer, String>();

 

        

        hm1.put(new Integer(1), "Geeks");

        hm1.put(new Integer(2), "For");

        hm1.put(new Integer(3), "Geeks");

 

        for (Map.Entry mapElement : hm1.entrySet()) {

            int key

                = (int)mapElement.getKey();

 

            

            String value

                = (String)mapElement.getValue();

 

            System.out.println(key + " : "

                               + value);

        }

    }

}

Producción:


1 : Geeks
2 : For
3 : Geeks

Características de una interfaz de mapa

  1. Un mapa no puede contener claves duplicadas y cada clave se puede asignar como máximo a un valor. Algunas implementaciones permiten una clave nula y un valor nulo como HashMap y LinkedHashMap, pero a algunas no les gusta TreeMap.
  2. El orden de un mapa depende de las implementaciones específicas. Por ejemplo, TreeMap y LinkedHashMap tienen un orden predecible, mientras que HashMap no.
  3. Hay dos interfaces para implementar Map en java. Son, Map y SortedMap, y tres clases: HashMap, TreeMap y LinkedHashMap.

¿Por qué y cuándo utilizar Maps?

Los mapas son perfectos para usar en el mapeo de asociaciones de valores clave, como los diccionarios. Los mapas se utilizan para realizar búsquedas por claves o cuando alguien quiere recuperar y actualizar elementos por claves. Algunos ejemplos son:

  • Un mapa de códigos de error y sus descripciones.
  • Un mapa de códigos postales y ciudades.
  • Un mapa de gerentes y empleados. Cada gerente (clave) está asociado con una lista de empleados (valor) que administra.
  • Un mapa de clases y estudiantes. Cada clase (clave) está asociada con una lista de estudiantes (valor).

Crear objetos de mapa

Dado que Map es una interfaz, no se pueden crear objetos del tipo map. Siempre necesitamos una clase que amplíe este mapa para crear un objeto. Y también, después de la introducción de Genéricos en Java 1.5, es posible restringir el tipo de objeto que se puede almacenar en el Mapa. Este mapa con seguridad de tipos se puede definir como:

// Obj es el tipo de objeto que se almacenará en Map
Mapa hm = nuevo HashMap ();

Clases que implementan la interfaz Map

1. HashMap: HashMap es parte de la colección de Java desde Java 1.2. Proporciona la implementación básica de la interfaz Map de Java. Almacena los datos en pares (clave, valor). Para acceder a un valor hay que conocer su clave. Esta clase usa una técnica llamada Hashing. El hash es una técnica para convertir una cadena grande en una cadena pequeña que representa la misma cadena. Un valor más corto ayuda a indexar y a realizar búsquedas más rápidas. Veamos cómo crear un objeto de mapa usando esta clase.

import java.util.*;

 

public class GFG {

 

    public static void main(String[] args)

    {

        Map<String, Integer> map

            = new HashMap<>();

 

        map.put("vishal", 10);

        map.put("sachin", 30);

        map.put("vaibhav", 20);

 

        for (Map.Entry<String, Integer> e : map.entrySet())

            System.out.println(e.getKey() + " "

                               + e.getValue());

    }

}

Producción:


vaibhav 20
vishal 10
sachin 30

2. LinkedHashMap: LinkedHashMap es como HashMap con la característica adicional de mantener un orden de elementos insertados en él. HashMap proporcionó la ventaja de una rápida inserción, búsqueda y eliminación, pero nunca mantuvo el seguimiento y el orden de inserción que proporciona el LinkedHashMap donde se puede acceder a los elementos en su orden de inserción. Veamos cómo crear un objeto de mapa usando esta clase.

import java.util.*;

 

public class GFG {

 

    public static void main(String[] args)

    {

        Map<String, Integer> map

            = new LinkedHashMap<>();

 

        map.put("vishal", 10);

        map.put("sachin", 30);

        map.put("vaibhav", 20);

 

        for (Map.Entry<String, Integer> e : map.entrySet())

            System.out.println(e.getKey() + " "

                               + e.getValue());

    }

}

Producción:


vishal 10
sachin 30
vaibhav 20

3. TreeMap: TreeMap en Java se utiliza para implementar la interfaz Map y NavigableMap junto con la clase abstracta. El mapa se ordena según el orden natural de sus claves, o mediante un comparador proporcionado en el momento de la creación del mapa, según el constructor que se utilice. Esto demuestra ser una forma eficaz de ordenar y almacenar los pares clave-valor. El orden de almacenamiento mantenido por el mapa de árbol debe ser coherente con iguales como cualquier otro mapa ordenado, independientemente de los comparadores explícitos. Veamos cómo crear un objeto de mapa usando esta clase.

import java.util.*;

 

public class GFG {

 

    public static void main(String[] args)

    {

        Map<String, Integer> map

            = new TreeMap<>();

 

        map.put("vishal", 10);

        map.put("sachin", 30);

        map.put("vaibhav", 20);

 

        for (Map.Entry<String, Integer> e : map.entrySet())

            System.out.println(e.getKey() + " "

                               + e.getValue());

    }

}

Producción:


sachin 30
vaibhav 20
vishal 10

Métodos en la interfaz del mapa

Método Descripción
claro() Este método se utiliza para borrar y eliminar todos los elementos o asignaciones de una colección de mapas especificada.
containsKey (Objeto) Este método se utiliza para verificar si una clave en particular se está mapeando en el mapa o no. Toma el elemento clave como parámetro y devuelve True si ese elemento está mapeado en el mapa.
containsValue (Objeto) Este método se utiliza para comprobar si un valor en particular está siendo asignado por una o más de una clave en el Mapa. Toma el valor como parámetro y devuelve Verdadero si ese valor está asignado por alguna de las claves en el mapa.
entrySet () Este método se utiliza para crear un conjunto de los mismos elementos contenidos en el mapa. Básicamente, devuelve una vista de conjunto del mapa o podemos crear un nuevo conjunto y almacenar los elementos del mapa en ellos.
es igual a (Objeto) Este método se utiliza para comprobar la igualdad entre dos mapas. Verifica si los elementos de un mapa pasado como parámetro son iguales a los elementos de este mapa o no.
obtener (objeto) Este método se utiliza para recuperar o buscar el valor asignado por una clave particular mencionada en el parámetro. Devuelve NULL cuando el mapa no contiene tal asignación para la clave.
código hash() Este método se utiliza para generar un código hash para el mapa dado que contiene claves y valores.
esta vacio() Este método se utiliza para verificar si un mapa tiene alguna entrada para pares de clave y valor. Si no existe ningún mapeo, esto devuelve verdadero.
juego de llaves() Este método se utiliza para devolver una vista de conjunto de las claves contenidas en este mapa. El conjunto está respaldado por el mapa, por lo que los cambios en el mapa se reflejan en el conjunto y viceversa.

close