Interfaz de mapa en Java

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

Java-Collection-Framework-Fundamentals

Geeks, la lluvia de ideas debería haber sido por qué y cuándo usar Maps.

Los mapas son perfectos para usar en el mapeo de asociación de clave-valor, como los diccionarios. Los mapas se utilizan para realizar búsquedas por claves o cuando alguien quiere recuperar y actualizar elementos por claves. Algunos escenarios comunes son los siguientes: 

  • 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 a una lista de alumnos (valor).

Map in Java

Creación de 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 Generics en Java 1.5, es posible restringir el tipo de objeto que se puede almacenar en el Mapa. 

Sintaxis: definición del mapa con seguridad de tipos

Map hm = new HashMap(); 
// Obj is the type of the object to be stored in Map

Características de una interfaz de mapa

  1. Un mapa no puede contener claves duplicadas y cada clave puede asignarse a un valor como máximo. Algunas implementaciones permiten claves nulas y valores nulos 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 órdenes predecibles, mientras que HashMap no.
  3. Hay dos interfaces para implementar Map en Java. Son Map y SortedMap , y tres clases: HashMap, TreeMap y LinkedHashMap.

Métodos en la interfaz del mapa

Método Acción realizada 
clear() Este método se utiliza para borrar y eliminar todos los elementos o asignaciones de una colección de mapas específica.
contieneClave(Objeto) Este método se utiliza para verificar si una tecla en particular se está asignando al Mapa o no. Toma el elemento clave como parámetro y devuelve True si ese elemento está mapeado en el mapa.
contieneValor(Objeto) Este método se usa para verificar si un valor en particular está siendo mapeado por una sola o más de una clave en el Mapa. Toma el valor como parámetro y devuelve True si ese valor está mapeado por cualquiera de las claves en el mapa.
conjuntoentrada() Este método se utiliza para crear un conjunto a partir de los mismos elementos contenidos en el mapa. Básicamente, devuelve una vista establecida 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 mapeo para la clave.
código hash() Este método se usa para generar un hashCode 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 ninguna asignación, 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.
poner(Objeto, Objeto) Este método se utiliza para asociar el valor especificado con la clave especificada en este mapa.
ponerTodo(Mapa) Este método se utiliza para copiar todas las asignaciones del mapa especificado a este mapa.
eliminar (Objeto) Este método se utiliza para eliminar la asignación de una clave de este mapa si está presente en el mapa.
Talla() Este método se utiliza para devolver el número de pares clave/valor disponibles en el mapa.
valores() Este método se utiliza para crear una colección a partir de los valores del mapa. Básicamente, devuelve una vista de colección de los valores en HashMap.
getOrDefault (clave de objeto, V valor predeterminado) Devuelve el valor al que se asigna la clave especificada o defaultValue si este mapa no contiene ninguna asignación para la clave.
fusionar (tecla K, valor V, BiFunction<? super V,? super V,? extiende V> función de reasignación) Si la clave especificada aún no está asociada con un valor o está asociada con un valor nulo, la asocia con el valor no nulo proporcionado.
putIfAbsent (clave K, valor V) Si la clave especificada aún no está asociada con un valor (o está asignada a un valor nulo), la asocia con el valor dado y devuelve un valor nulo; de lo contrario, devuelve el valor curassociaterent.

 Ejemplo:

Java

// Java Program to Demonstrate
// Working of Map interface
  
// Importing required classes
import java.util.*;
  
// Main class
class GFG {
  
    // Main driver method
    public static void main(String args[])
    {
        // Creating an empty HashMap
        Map<String, Integer> hm
            = new HashMap<String, Integer>();
  
        // Inserting pairs in above Map
        // using put() method
        hm.put("a", new Integer(100));
        hm.put("b", new Integer(200));
        hm.put("c", new Integer(300));
        hm.put("d", new Integer(400));
  
        // Traversing through Map using for-each loop
        for (Map.Entry<String, Integer> me :
             hm.entrySet()) {
  
            // Printing keys
            System.out.print(me.getKey() + ":");
            System.out.println(me.getValue());
        }
    }
}
Producción: 

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

 

Las clases que implementan la interfaz Map se representan en los siguientes medios y se describen más adelante de la siguiente manera:

Clase 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 se debe conocer su clave. Esta clase utiliza una técnica llamada Hashing . Hashing es una técnica de convertir una string grande en una string pequeña que representa la misma string. Un valor más corto ayuda en la indexación y búsquedas más rápidas. Veamos cómo crear un objeto de mapa usando esta clase.

Ejemplo 

Java

// Java Program to illustrate the Hashmap Class
  
// Importing required classes
import java.util.*;
  
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an empty HashMap
        Map<String, Integer> map = new HashMap<>();
  
        // Inserting entries in the Map
        // using put() method
        map.put("vishal", 10);
        map.put("sachin", 30);
        map.put("vaibhav", 20);
  
        // Iterating over Map
        for (Map.Entry<String, Integer> e : map.entrySet())
  
            // Printing key-value pairs
            System.out.println(e.getKey() + " "
                               + e.getValue());
    }
}
Producción

vaibhav 20
vishal 10
sachin 30

Clase 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 inserción, búsqueda y eliminación rápidas, pero nunca mantuvo el seguimiento y el orden de inserción que proporciona 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.

Ejemplo  

Java

// Java Program to Illustrate the LinkedHashmap Class
  
// Importing required classes
import java.util.*;
  
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an empty LinkedHashMap
        Map<String, Integer> map = new LinkedHashMap<>();
  
        // Inserting pair entries in above Map
        // using put() method
        map.put("vishal", 10);
        map.put("sachin", 30);
        map.put("vaibhav", 20);
  
        // Iterating over Map
        for (Map.Entry<String, Integer> e : map.entrySet())
  
            // Printing key-value pairs
            System.out.println(e.getKey() + " "
                               + e.getValue());
    }
}
Producción: 

vishal 10
sachin 30
vaibhav 20

 

Clase 3: Mapa de árbol

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 eficiente de ordenar y almacenar los pares clave-valor. El orden de almacenamiento mantenido por el mapa de árbol debe ser consistente con iguales al igual que cualquier otro mapa ordenado, independientemente de los comparadores explícitos. Veamos cómo crear un objeto de mapa usando esta clase.

Ejemplo  

Java

// Java Program to Illustrate TreeMap Class
  
// Importing required classes
import java.util.*;
  
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an empty TreeMap
        Map<String, Integer> map = new TreeMap<>();
  
        // Inserting custom elements in the Map
        // using put() method
        map.put("vishal", 10);
        map.put("sachin", 30);
        map.put("vaibhav", 20);
  
        // Iterating over Map using for each loop
        for (Map.Entry<String, Integer> e : map.entrySet())
  
            // Printing key-value pairs
            System.out.println(e.getKey() + " "
                               + e.getValue());
    }
}
Producción: 

sachin 30
vaibhav 20
vishal 10

 

Realización de varias operaciones utilizando la interfaz de mapa y la 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, tras la introducción de Generics en Java 1.5, es posible restringir el tipo de objeto que se puede almacenar en el mapa. 

Operación 1: Adición de 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 hashmap. Internamente, para cada elemento, se genera un hash separado y los elementos se indexan en función de este hash para que sea más eficiente.

Ejemplo 

Java

// Java program to demonstrate
// the working of Map interface
  
import java.util.*;
class GFG {
    public static void main(String args[])
    {
        // Default Initialization of a
        // Map
        Map<Integer, String> hm1 = new HashMap<>();
  
        // Initialization of a Map
        // using Generics
        Map<Integer, String> hm2
            = new HashMap<Integer, String>();
  
        // Inserting the Elements
        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}

 

Operación 2: Cambio de elemento

Después 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 están indexados usando las claves, el valor de la clave se puede cambiar simplemente insertando el valor actualizado de la clave que deseamos cambiar. 

Ejemplo 

Java

// Java program to demonstrate
// the working of Map interface
  
import java.util.*;
class GFG {
    public static void main(String args[])
    {
  
        // Initialization of a Map
        // using Generics
        Map<Integer, String> hm1
            = new HashMap<Integer, String>();
  
        // Inserting the Elements
        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}

 

Operación 3: Eliminación de elementos

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.

Ejemplo  

Java

// Java program to demonstrate
// the working of Map interface
  
import java.util.*;
class GFG {
  
    public static void main(String args[])
    {
  
        // Initialization of a Map
        // using Generics
        Map<Integer, String> hm1
            = new HashMap<Integer, String>();
  
        // Inserting the Elements
        hm1.put(new Integer(1), "Geeks");
        hm1.put(new Integer(2), "For");
        hm1.put(new Integer(3), "Geeks");
        hm1.put(new Integer(4), "For");
  
        // Initial Map
        System.out.println(hm1);
  
        hm1.remove(new Integer(4));
  
        // Final Map
        System.out.println(hm1);
    }
}
Producción: 

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

 

Operación 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 ciclo for-each y obtener las claves. El valor de la clave se encuentra utilizando el método getValue().

Ejemplo  

Java

// Java program to demonstrate
// the working of Map interface
  
import java.util.*;
class GFG {
    public static void main(String args[])
    {
  
        // Initialization of a Map
        // using Generics
        Map<Integer, String> hm1
            = new HashMap<Integer, String>();
  
        // Inserting the Elements
        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();
  
            // Finding the value
            String value
                = (String)mapElement.getValue();
  
            System.out.println(key + " : "
                               + value);
        }
    }
}
Producción: 

1 : Geeks
2 : For
3 : Geeks

 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *