HashMap

Correspondencia en Python —>

Un HashMap es un conjunto de información que está relacionada entre sí.
La primera relación ocurre entre una clave y su correspondiente valor. Dentro de un mismo HashMap puede haber uno, dos o muchos pares clave/valor.
La clave puede ser un número, un String…

El valor puede ser cualquier también cualquier tipo de dato.

El requisito más importante es que cada clave debe ser única. No puede haber dos claves iguales. Los valores sí pueden repetirse.

Veamos un ejemplo de cómo declarar un HashMap y cómo añadirle datos. Para añadir datos utilizamos el método .put (clave, valor). Si utilizamos este método con una clave que ya existen en el HashMap, lo que hace es que actualiza su valor con el nuevo, pero no se repite esa clave.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);
        System.out.println(mi_diccionario);
    }
}
Resultado:

{a=14, b=63, c=43, d=68}

El método .get(clave) permite obtener el valor asociado a la clave que se pasa como parámetro.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);
        System.out.println(mi_diccionario);
        int valor_1=mi_diccionario.get("a");
        int valor_2=mi_diccionario.get("c");
        int producto=valor_1*valor_2;
        System.out.println("El producto de "+valor_1+ "*"+valor_2+" es: "+producto);
    }
}
Resultado:

El producto de 14*43 es: 602

Con el método .keySet( ) Obtenemos todas las claves del diccionario.

El método .values( ) Se obtienen todos los valores del diccionario.

El método .entrySet( ) Permite obtener claves y valores a la vez.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        System.out.println("Claves de mi_diccionario: ");
        for (String su_clave : mi_diccionario.keySet()){
            System.out.print(su_clave+"-");
        }

        System.out.println("\nValores de mi_diccionario: ");
        for (int su_valor : mi_diccionario.values()){
            System.out.print(su_valor+" # ");
        }

        System.out.println("\nEntradas de mi_diccionario: ");
        for (Map.Entry<String,Integer> input : mi_diccionario.entrySet()){
            System.out.println(input.getKey()+"->"+input.getValue());
        }
    }
}
Resultado:

Claves de mi_diccionario: 
a-b-c-d-
Valores de mi_diccionario: 
14 # 63 # 43 # 68 # 
Entradas de mi_diccionario: 
a->14
b->63
c->43
d->68

El método .remove(clave) nos permite eliminar un par clave/valor a partir de la clave que se pasa como parámetro:

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        System.out.println(mi_diccionario);

        mi_diccionario.remove("a");

        System.out.println(mi_diccionario);
    }
}
Resultado:

{a=14, b=63, c=43, d=68}
{b=63, c=43, d=68}

Si intentamos eliminar una clave que no se encuentra en el HashMap, no se generará ningún error y el programa prosigue. Sin embargo si intentamos leer una clave con .get(clave) que no existe, SI que lanzará un mensaje de error y el programa se detiene.

Para evitar que ocurra lo segundo, podemos hacer una comprobación previa con el método .containsKey(clave) que nos dirá si la clave existe o no en el HashMap.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        if (mi_diccionario.containsKey("a")){
            System.out.println("El valor de 'a' es: "+mi_diccionario.get("a"));
        }
        else {
            System.out.println("La clave 'a' no existe.");
        }

        if (mi_diccionario.containsKey("z")){
            System.out.println("El valor de 'z' es: "+mi_diccionario.get("z"));
        }
        else {
            System.out.println("La clave 'z' no existe.");
        }
    }
}
Resultado:

El valor de 'a' es: 14
La clave 'z' no existe.

También podemos averiguar si un valor determinado está incluido en un HashMap. Si encontramos que está y queremos saber a qué clave está asociado dicho valor, podemos recorrer el HashMap con el método .entrySet( ) hasta encontrar el valor, que además puede pertenecer a varias claves.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        if (mi_diccionario.containsValue(112)){
            for (Map.Entry<String,Integer> input : mi_diccionario.entrySet()){
                if (input.getValue()==112){
                    System.out.println("El valor 112 está en la clave: "+input.getKey());
                }
            }

        }
        else {
            System.out.println("El valor 112 no está incluido en mi_diccionario.");
        }

        if (mi_diccionario.containsValue(68)){
            for (Map.Entry<String,Integer> input : mi_diccionario.entrySet()){
                if (input.getValue()==68){
                    System.out.println("El valor 68 está en la clave: "+input.getKey());
                }
            }
        }
        else {
            System.out.println("El valor 68 no existe en mi_diccionario.");
        }
    }
}
Resultado:

El valor 112 no está incluido en mi_diccionario.
El valor 68 está en la clave: d

Con el método .clear( ) vaciamos completamente un HashMap de todos sus valores.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        System.out.println(mi_diccionario);

        mi_diccionario.clear();
        System.out.println(mi_diccionario);
    }
}
Resultado:

{a=14, b=63, c=43, d=68}
{ }

Si queremos crear una copia de un HashMap en otro, pero que ambos sean independientes entre sí, lo más fiable es crear el nuevo HashMap vacío. A continuación iteramos sobre el primero y vamos copiando añadiendo una copia de cada clave/valor en el nuevo con el método .put(clave,valor)

Para obtener el tamaño de un HashMap, utilizaremos el método .size( ) que nos devuelve la cantidad de pares claves/valor que existen dentro del HashMap.

import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        int tamanyo=mi_diccionario.size();

        System.out.println("mi_diccionario tiene "+tamanyo+" pares claves/valor.");

    }
}
Resultado:

mi_diccionario tiene 4 pares claves/valor.

Con un método muy sencillo podemos obtener un ArrayList que contenga todas las claves de un HashMap.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Mis_HashMap {

    public static void main(String[] args) {
        Map<String, Integer> mi_diccionario = new HashMap<>();
        mi_diccionario.put("a",14);
        mi_diccionario.put("b",63);
        mi_diccionario.put("c",43);
        mi_diccionario.put("d",68);

        ArrayList<String> listaClaves = new ArrayList<>(mi_diccionario.keySet());

        System.out.println(listaClaves);

    }
}
Resultado:

[a, b, c, d]
InicioComandos JavaBloques de código.
Comentar códigoSystem.out.printScanner (System.in)
Captura de erroresStringDatos Numéricos
Elementos aleatoriosDatos Fecha/horaConstantes
Bucles forBucles whileBloque if
ArraysArrayListswitch case
HashSetHashMapMétodos.
ClasesArchivosEntorno gráfico Swing
JFrame (Ventanas)Componentes básicos.