Введение
В этом практическом занятии (лабораторной работе) вы научитесь эффективно проверять, существует ли определенный ключ в Java-объекте Map. Это важный навык для предотвращения ошибок и обеспечения надежных операций с картами (коллекциями типа Map).
Мы рассмотрим основной метод containsKey() для проверки наличия ключа, продемонстрируем его использование с разными типами ключей и покажем, как обрабатывать нулевые (null) ключи, чтобы вы получили всестороннее понимание проверки ключей в Java-картах.
Использование метода containsKey() для проверки ключа
На этом этапе мы научимся проверять, существует ли определенный ключ в объекте HashMap с помощью метода containsKey(). Это фундаментальная операция при работе с картами (коллекциями типа Map), которая позволяет избежать ошибок, которые могут возникнуть при попытке доступа к несуществующему ключу.
HashMap - это структура данных в Java, которая хранит пары ключ-значение. Представьте его как словарь, где каждое слово (ключ) имеет определение (значение). Метод containsKey() аналогичен вопросу словарю: "Есть ли у вас запись для этого конкретного слова?"
Создадим простую Java-программу, чтобы продемонстрировать, как использовать метод containsKey().
Откройте файл
HelloJava.javaв редакторе WebIDE. Если вы завершили предыдущую лабораторную работу (лабораторный практикум), этот файл должен уже существовать в каталоге~/project.Замените существующий код в файле
HelloJava.javaследующим кодом: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."); } } }Рассмотрим новые части этого кода:
import java.util.HashMap;: Эта строка импортирует классHashMap, который нам нужен для работы с объектамиHashMap.HashMap<String, String> userMap = new HashMap<>();: Эта строка создает новый объектHashMap, где и ключи, и значения имеют типString.userMap.put("alice", "Alice Smith");: Эта строка добавляет пару ключ-значение в карту. Ключ - это"alice", а значение -"Alice Smith".userMap.containsKey(keyToCheck1): Это основа данного этапа. МетодcontainsKey()принимает ключ в качестве аргумента и возвращаетtrue, если ключ найден в карте, иfalseв противном случае.
Сохраните файл
HelloJava.java(Ctrl+S или Cmd+S).Теперь скомпилируйте программу с помощью команды
javacв терминале:javac HelloJava.javaЕсли нет ошибок, вы не увидите никакого вывода.
Наконец, запустите скомпилированную программу с помощью команды
java:java HelloJavaВы должны увидеть вывод, похожий на следующий:
Checking for key: alice Key 'alice' exists in the map. Checking for key: david Key 'david' does not exist in the map.
Этот вывод подтверждает, что метод containsKey() правильно определил, присутствовали ли ключи "alice" и "david" в нашей карте userMap.
Тестирование с разными типами ключей
На предыдущем этапе мы использовали ключи типа String в нашем объекте HashMap. Однако, HashMap может использовать различные типы данных в качестве ключей, при условии, что они являются объектами (примитивные типы, такие как int, char и т.д., автоматически "упаковываются" в соответствующие объекты-обертки, такие как Integer, Character).
На этом этапе мы рассмотрим использование различных типов данных в качестве ключей в объекте HashMap и увидим, как метод containsKey() работает с ними.
Откройте файл
HelloJava.javaв редакторе WebIDE.Замените существующий код следующим:
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."); } } }В этом коде мы создали объект
HashMap, где ключами являются объекты типаInteger(представляющие идентификаторы студентов), а значениями - объекты типаString(представляющие имена студентов). Затем мы используем методcontainsKey()как с объектами типаInteger, так и с примитивным типомint, чтобы показать, что Java автоматически обрабатывает преобразование (автоупаковку).Сохраните файл
HelloJava.java.Скомпилируйте программу:
javac HelloJava.javaЗапустите программу:
java HelloJavaВы должны увидеть вывод, похожий на следующий:
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.
Это демонстрирует, что метод containsKey() корректно работает с ключами типа Integer, и что функция автоупаковки Java позволяет напрямую использовать примитивные значения типа int при проверке наличия ключей в объекте HashMap<Integer, ...>.
Обработка нулевых ключей
В Java в объекте HashMap можно использовать null в качестве ключа, но разрешено только один ключ со значением null. Важно понять, как работает метод containsKey() при работе с нулевыми ключами.
На этом этапе мы изменим нашу программу так, чтобы она включала нулевой ключ, а затем используем метод containsKey() для проверки его наличия.
Откройте файл
HelloJava.javaв редакторе WebIDE.Замените существующий код следующим:
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."); } } }Здесь мы создали объект
HashMapс ключами и значениями типаString. Затем явно добавили нулевой ключ с помощьюstatusMap.put(null, "User status is unknown");. Наконец, используемcontainsKey(null)для проверки наличия нулевого ключа.Сохраните файл
HelloJava.java.Скомпилируйте программу:
javac HelloJava.javaЗапустите программу:
java HelloJavaВы должны увидеть вывод, похожий на следующий:
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.
Этот вывод подтверждает, что метод containsKey() правильно определяет наличие нулевого ключа в объекте HashMap. Хотя использование нулевых ключей возможно, часто рекомендуется избегать их, если это возможно, чтобы сделать код более понятным и предотвратить потенциальные проблемы с NullPointerException в других частях программы.
Резюме
В этом практическом занятии (лабораторной работе) мы научились проверять, существует ли определенный ключ в объекте HashMap на Java с помощью метода containsKey(). Эта фундаментальная операция является важной для предотвращения ошибок при доступе к элементам карты (map). Мы практиковались в использовании метода containsKey() с ключами типа строка (string) и увидели, как он правильно определяет существующие и несуществующие ключи.



