Java HashMap
HashMap es una tabla hash que almacena asignaciones de pares clave-valor.
HashMap implementa la interfaz Map, almacena datos según el valor HashCode de la clave, tiene una velocidad de acceso muy rápida, permite como máximo una clave null por registro y no admite sincronización de hilos.
HashMap no está ordenado, es decir, no registra el orden de inserción.
HashMap hereda de AbstractMap e implementa las interfaces Map, Cloneable y java.io.Serializable.

Los tipos de key y value en HashMap pueden ser iguales o diferentes; pueden ser key y value de tipo String, o key de tipo Integer y value de tipo String.
Los elementos en HashMap son en realidad objetos; algunos tipos primitivos comunes pueden usar sus clases envolventes.
La tabla de clases envolventes correspondientes a los tipos primitivos es la siguiente:
| Tipo primitivo | Tipo de referencia |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
La clase HashMap se encuentra en el paquete java.util; antes de usarla es necesario importarla. El formato de sintaxis es el siguiente:
import java.util.HashMap; // 引入 HashMap 类
En el siguiente ejemplo creamos un objeto HashMap llamado Sites, con key de tipo Integer y value de tipo String:
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
Agregar elementos
La clase HashMap proporciona muchos métodos útiles; para agregar pares clave-valor se puede usar el método put():
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// Agregar pares clave-valor
Sites.put(1, "Google");
Sites.put(2, "Ejemplo");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites);
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
{1=Google, 2=Ejemplo, 3=Taobao, 4=Zhihu}
El siguiente ejemplo crea una key de tipo String y un value de tipo String:
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<String, String> Sites = new HashMap<String, String>();
// Agregar pares clave-valor
Sites.put("one", "Google");
Sites.put("two", "Ejemplo");
Sites.put("three", "Taobao");
Sites.put("four", "Zhihu");
System.out.println(Sites);
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
{four=Zhihu, one=Google, two=Ejemplo, three=Taobao}
Acceder a elementos
Podemos usar el método get(key) para obtener el value correspondiente a la clave:
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// Agregar pares clave-valor
Sites.put(1, "Google");
Sites.put(2, "Ejemplo");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites.get(3));
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
Taobao
Eliminar elementos
Podemos usar el método remove(key) para eliminar el par clave-valor correspondiente a la clave:
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// Agregar pares clave-valor
Sites.put(1, "Google");
Sites.put(2, "Ejemplo");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
Sites.remove(4);
System.out.println(Sites);
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
{1=Google, 2=Ejemplo, 3=Taobao}
Para eliminar todos los pares clave-valor se puede usar el método clear:
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// Agregar pares clave-valor
Sites.put(1, "Google");
Sites.put(2, "Ejemplo");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
Sites.clear();
System.out.println(Sites);
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
{}
Calcular el tamaño
Si se desea calcular el número de elementos en un HashMap, se puede usar el método size():
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// Agregar pares clave-valor
Sites.put(1, "Google");
Sites.put(2, "Ejemplo");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites.size());
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
4
Iterar sobre HashMap
Se puede usar for-each para iterar sobre los elementos en un HashMap.
Si solo deseas obtener las claves, puedes usar el método keySet(), y luego obtener el value correspondiente mediante get(key). Si solo deseas obtener los values, puedes usar el método values().
Ejemplo
import java.util.HashMap;
public class EjemploTest {
public static void main(String[] args) {
// Crear el objeto HashMap Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// Agregar pares clave-valor
Sites.put(1, "Google");
Sites.put(2, "Ejemplo");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
// Mostrar key y value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// Devolver todos los values
for(String value: Sites.values()) {
// Mostrar cada value
System.out.print(value + ", ");
}
}
}
Al ejecutar el código anterior, el resultado es el siguiente:
key: 1 value: Google key: 2 value: Ejemplo key: 3 value: Taobao key: 4 value: Zhihu Google, Ejemplo, Taobao, Zhihu,
Métodos de Java HashMap
hashmapLa lista de métodos comunes de Java HashMap es la siguiente:
| Método | Descripción |
|---|---|
| clear() | Elimina todos los pares clave/valor en el hashMap. |
| clone() | Copia un hashMap. |
| isEmpty() | Determina si el hashMap está vacío. |
| size() | Calcula el número de pares clave/valor en el hashMap. |
| put() | Agrega un par clave/valor al hashMap. |
| putAll() | Agrega todos los pares clave/valor al hashMap. |
| putIfAbsent() | Si la clave especificada no existe en el hashMap, inserta el par clave/valor en el hashMap. |
| remove() | Elimina la asignación de la clave especificada key en el hashMap. |
| containsKey() | Verifica si existe una asignación correspondiente a la clave especificada en el hashMap. |
| containsValue() | Verifica si existe una asignación correspondiente al value especificado en el hashMap. |
| replace() | Reemplaza el value correspondiente a la clave especificada en el hashMap. |
| replaceAll() | Reemplaza todas las asignaciones en el hashMap con el resultado de la función dada. |
| get() | Obtiene el value correspondiente a la clave especificada. |
| getOrDefault() | Obtiene el value correspondiente a la clave especificada; si no encuentra la clave, devuelve el valor predeterminado establecido. |
| forEach() | Ejecuta la operación especificada en cada asignación del hashMap. |
| entrySet() | Devuelve una vista de colección de todos los elementos de asignación en el hashMap. |
| keySet() | Devuelve una vista de colección de todas las claves en el hashMap. |
| values() | Devuelve todos los values presentes en el hashMap. |
| merge() | Agrega un par clave-valor al hashMap. |
| compute() | Recalcula el valor de la clave especificada en el hashMap. |
| computeIfAbsent() | Recalcula el valor de la clave especificada en el hashMap; si la clave no existe, la agrega al hashMap. |
| computeIfPresent() | Recalcula el valor de la clave especificada en el hashMap, siempre que la clave exista en el hashMap. |
Puedes consultar más métodos de API en:https://www.example.com/manual/jdk11api/java.base/java/util/HashMap.html
Otras extensiones
Colecciones de Java