Introducción
En Java, HashMap es una implementación de la interfaz Map que utiliza una tabla hash para almacenar pares clave-valor. Es una de las estructuras de datos más utilizadas debido a su eficiencia en operaciones de inserción, búsqueda y eliminación.
Características de HashMap:
- No permite claves duplicadas: Cada clave en un
HashMapdebe ser única. - Permite valores nulos: Tanto las claves como los valores pueden ser nulos.
- No garantiza el orden: Los elementos no se almacenan en el orden en que se insertan.
Creación de un HashMap
Para crear un HashMap, primero debes importar la clase desde el paquete java.util.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// Crear un HashMap
HashMap<Integer, String> map = new HashMap<>();
}
}Operaciones Básicas
Insertar Elementos
Puedes insertar elementos en un HashMap utilizando el método put.
Obtener Elementos
Para obtener un valor asociado a una clave, utiliza el método get.
Eliminar Elementos
Para eliminar un par clave-valor, utiliza el método remove.
Verificar la Existencia de una Clave o Valor
Puedes verificar si una clave o un valor existe en el HashMap utilizando los métodos containsKey y containsValue.
boolean hasKey = map.containsKey(1); // Devuelve true
boolean hasValue = map.containsValue("Dos"); // Devuelve falseIterar sobre un HashMap
Puedes iterar sobre las claves, valores o pares clave-valor de un HashMap utilizando un bucle for-each.
// Iterar sobre las claves
for (Integer key : map.keySet()) {
System.out.println("Clave: " + key);
}
// Iterar sobre los valores
for (String value : map.values()) {
System.out.println("Valor: " + value);
}
// Iterar sobre los pares clave-valor
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("Clave: " + entry.getKey() + ", Valor: " + entry.getValue());
}Ejemplo Práctico
Vamos a crear un programa que almacene y gestione un directorio telefónico utilizando un HashMap.
import java.util.HashMap;
import java.util.Map;
public class DirectorioTelefonico {
public static void main(String[] args) {
// Crear un HashMap para almacenar el directorio telefónico
HashMap<String, String> directorio = new HashMap<>();
// Agregar contactos
directorio.put("Juan", "123-456-7890");
directorio.put("María", "234-567-8901");
directorio.put("Pedro", "345-678-9012");
// Obtener y mostrar el número de teléfono de Juan
String numeroJuan = directorio.get("Juan");
System.out.println("Número de Juan: " + numeroJuan);
// Eliminar el contacto de Pedro
directorio.remove("Pedro");
// Verificar si María está en el directorio
boolean tieneMaria = directorio.containsKey("María");
System.out.println("¿Está María en el directorio? " + tieneMaria);
// Mostrar todos los contactos
for (Map.Entry<String, String> contacto : directorio.entrySet()) {
System.out.println("Nombre: " + contacto.getKey() + ", Número: " + contacto.getValue());
}
}
}Ejercicio Práctico
Ejercicio 1: Gestión de Inventario
Crea un programa que gestione un inventario de productos utilizando un HashMap. El programa debe permitir:
- Agregar productos con su cantidad.
- Actualizar la cantidad de un producto existente.
- Eliminar un producto del inventario.
- Mostrar todos los productos y sus cantidades.
Solución
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Inventario {
public static void main(String[] args) {
HashMap<String, Integer> inventario = new HashMap<>();
Scanner scanner = new Scanner(System.in);
int opcion;
do {
System.out.println("1. Agregar producto");
System.out.println("2. Actualizar cantidad");
System.out.println("3. Eliminar producto");
System.out.println("4. Mostrar inventario");
System.out.println("5. Salir");
System.out.print("Elige una opción: ");
opcion = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea
switch (opcion) {
case 1:
System.out.print("Nombre del producto: ");
String producto = scanner.nextLine();
System.out.print("Cantidad: ");
int cantidad = scanner.nextInt();
inventario.put(producto, cantidad);
break;
case 2:
System.out.print("Nombre del producto: ");
producto = scanner.nextLine();
if (inventario.containsKey(producto)) {
System.out.print("Nueva cantidad: ");
cantidad = scanner.nextInt();
inventario.put(producto, cantidad);
} else {
System.out.println("Producto no encontrado.");
}
break;
case 3:
System.out.print("Nombre del producto: ");
producto = scanner.nextLine();
inventario.remove(producto);
break;
case 4:
for (Map.Entry<String, Integer> entry : inventario.entrySet()) {
System.out.println("Producto: " + entry.getKey() + ", Cantidad: " + entry.getValue());
}
break;
case 5:
System.out.println("Saliendo...");
break;
default:
System.out.println("Opción no válida.");
}
} while (opcion != 5);
scanner.close();
}
}Conclusión
En esta sección, hemos aprendido sobre HashMap, una estructura de datos eficiente para almacenar y gestionar pares clave-valor. Hemos cubierto las operaciones básicas, como insertar, obtener, eliminar y verificar elementos, así como iterar sobre el HashMap. Además, hemos visto un ejemplo práctico y un ejercicio para reforzar los conceptos aprendidos. En el próximo módulo, exploraremos otras estructuras de datos y colecciones en Java.
Curso de Programación en Java
Módulo 1: Introducción a Java
- Introducción a Java
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Operadores
Módulo 2: Flujo de Control
Módulo 3: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Métodos
- Constructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Programación Orientada a Objetos Avanzada
Módulo 5: Estructuras de Datos y Colecciones
Módulo 6: Manejo de Excepciones
- Introducción a las Excepciones
- Bloque Try-Catch
- Throw y Throws
- Excepciones Personalizadas
- Bloque Finally
Módulo 7: Entrada/Salida de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Flujos de Archivos
- BufferedReader y BufferedWriter
- Serialización
Módulo 8: Multihilo y Concurrencia
- Introducción al Multihilo
- Creación de Hilos
- Ciclo de Vida de un Hilo
- Sincronización
- Utilidades de Concurrencia
Módulo 9: Redes
- Introducción a las Redes
- Sockets
- ServerSocket
- DatagramSocket y DatagramPacket
- URL y HttpURLConnection
