Introducción
En este laboratorio, aprenderás cómo verificar de manera efectiva si una clave específica existe dentro de un Map de Java. Esta es una habilidad crucial para prevenir errores y garantizar operaciones robustas en los mapas.
Exploraremos el método fundamental containsKey() para verificar la presencia de una clave, demostraremos su uso con diferentes tipos de claves y abordaremos cómo manejar claves nulas, brindando una comprensión integral de la verificación de claves en los mapas de Java.
Utiliza containsKey() para verificar la clave
En este paso, aprenderemos cómo verificar si una clave específica existe en un HashMap utilizando el método containsKey(). Esta es una operación fundamental cuando se trabaja con mapas, ya que te permite evitar errores que podrían ocurrir si intentas acceder a una clave que no existe.
Un HashMap es una estructura de datos en Java que almacena pares clave-valor. Puedes pensar en él como un diccionario donde cada palabra (la clave) tiene una definición (el valor). El método containsKey() es como preguntarle al diccionario: "¿Tienes una entrada para esta palabra específica?"
Vamos a crear un sencillo programa de Java para demostrar cómo usar containsKey().
Abre el archivo
HelloJava.javaen el editor WebIDE. Si completaste el laboratorio anterior, este archivo ya debería existir en tu directorio~/project.Reemplaza el código existente en
HelloJava.javacon el siguiente código:import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, String> userMap = new HashMap<>(); // Add some key-value pairs userMap.put("alice", "Alice Smith"); userMap.put("bob", "Bob Johnson"); userMap.put("charlie", "Charlie Brown"); // Check if a key exists using containsKey() String keyToCheck1 = "alice"; String keyToCheck2 = "david"; System.out.println("Checking for key: " + keyToCheck1); if (userMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (userMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } } }Veamos las nuevas partes de este código:
import java.util.HashMap;: Esta línea importa la claseHashMap, que necesitamos para usarHashMap.HashMap<String, String> userMap = new HashMap<>();: Esta línea crea un nuevoHashMapdonde tanto las claves como los valores son de tipoString.userMap.put("alice", "Alice Smith");: Esto agrega un par clave-valor al mapa. La clave es"alice"y el valor es"Alice Smith".userMap.containsKey(keyToCheck1): Este es el núcleo de este paso. El métodocontainsKey()toma una clave como argumento y devuelvetruesi la clave se encuentra en el mapa, yfalseen caso contrario.
Guarda el archivo
HelloJava.java(Ctrl+S o Cmd+S).Ahora, compila el programa utilizando el comando
javacen la terminal:javac HelloJava.javaSi no hay errores, no verás ninguna salida.
Finalmente, ejecuta el programa compilado utilizando el comando
java:java HelloJavaDeberías ver una salida similar a esta:
Checking for key: alice Key 'alice' exists in the map. Checking for key: david Key 'david' does not exist in the map.
Esta salida confirma que containsKey() identificó correctamente si las claves "alice" y "david" estaban presentes en nuestro userMap.
Prueba con diferentes tipos de claves
En el paso anterior, utilizamos claves de tipo String en nuestro HashMap. Sin embargo, HashMap puede utilizar varios tipos de datos como claves, siempre y cuando sean objetos (los tipos primitivos como int, char, etc., se "envuelven" automáticamente en sus correspondientes envoltorios de objetos como Integer, Character).
En este paso, exploraremos el uso de diferentes tipos de datos como claves en un HashMap y veremos cómo funciona containsKey() con ellos.
Abre el archivo
HelloJava.javaen el editor WebIDE.Reemplaza el código existente con el siguiente:
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap with Integer keys and String values HashMap<Integer, String> studentMap = new HashMap<>(); // Add some key-value pairs studentMap.put(101, "Alice Smith"); studentMap.put(102, "Bob Johnson"); studentMap.put(103, "Charlie Brown"); // Check for keys using containsKey() with Integer keys Integer keyToCheck1 = 101; Integer keyToCheck2 = 200; // A key that does not exist System.out.println("Checking for key: " + keyToCheck1); if (studentMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (studentMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } // You can also use primitive int directly, Java will auto-box it int primitiveKey = 102; System.out.println("\nChecking for primitive key: " + primitiveKey); if (studentMap.containsKey(primitiveKey)) { System.out.println("Key '" + primitiveKey + "' exists in the map."); } else { System.out.println("Key '" + primitiveKey + "' does not exist in the map."); } } }En este código, hemos creado un
HashMapdonde las claves son objetosInteger(que representan IDs de estudiantes) y los valores son objetosString(que representan nombres de estudiantes). Luego, utilizamoscontainsKey()tanto con objetosIntegercomo con unintprimitivo para mostrar que Java se encarga de la conversión (auto-boxing) por ti.Guarda el archivo
HelloJava.java.Compila el programa:
javac HelloJava.javaEjecuta el programa:
java HelloJavaDeberías ver una salida similar a esta:
Checking for key: 101 Key '101' exists in the map. Checking for key: 200 Key '200' does not exist in the map. Checking for primitive key: 102 Key '102' exists in the map.
Esto demuestra que containsKey() funciona correctamente con claves Integer, y que la característica de auto-boxing de Java te permite utilizar valores int primitivos directamente al verificar claves en un HashMap<Integer, ...>.
Manejar claves nulas
En el HashMap de Java, en realidad se puede utilizar null como clave, pero solo se permite una clave null. Es importante entender cómo se comporta containsKey() cuando se trata de claves null.
En este paso, modificaremos nuestro programa para incluir una clave null y luego usaremos containsKey() para verificar su presencia.
Abre el archivo
HelloJava.javaen el editor WebIDE.Reemplaza el código existente con el siguiente:
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap that allows null keys HashMap<String, String> statusMap = new HashMap<>(); // Add some key-value pairs, including a null key statusMap.put("active", "User is currently online"); statusMap.put("inactive", "User is offline"); statusMap.put(null, "User status is unknown"); // Adding a null key // Check for keys using containsKey(), including null String keyToCheck1 = "active"; String keyToCheck2 = "pending"; // A key that does not exist String keyToCheck3 = null; // The null key System.out.println("Checking for key: " + keyToCheck1); if (statusMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (statusMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } System.out.println("\nChecking for null key:"); if (statusMap.containsKey(keyToCheck3)) { System.out.println("Null key exists in the map."); } else { System.out.println("Null key does not exist in the map."); } } }Aquí, hemos creado un
HashMapcon claves y valores de tipoString. Luego, agregamos explícitamente una clavenullutilizandostatusMap.put(null, "User status is unknown");. Finalmente, usamoscontainsKey(null)para verificar si la clavenullestá presente.Guarda el archivo
HelloJava.java.Compila el programa:
javac HelloJava.javaEjecuta el programa:
java HelloJavaDeberías ver una salida similar a esta:
Checking for key: active Key 'active' exists in the map. Checking for key: pending Key 'pending' does not exist in the map. Checking for null key: Null key exists in the map.
Esta salida confirma que containsKey() identifica correctamente la presencia de la clave null en el HashMap. Si bien es posible utilizar claves null, a menudo se recomienda evitarlas si es posible para que tu código sea más claro y evitar posibles problemas de NullPointerException en otras partes de tu programa.
Resumen
En este laboratorio (lab), aprendimos cómo verificar si una clave específica existe en un HashMap de Java utilizando el método containsKey(). Esta operación fundamental es crucial para prevenir errores al acceder a los elementos del mapa. Practicamos el uso de containsKey() con claves de tipo cadena (string) y observamos cómo identifica correctamente las claves existentes y no existentes.



