Как проверить, пуста ли карта (Map) в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли Map в Java пустым. Мы рассмотрим различные методы для этой распространенной операции, начиная с простого метода isEmpty(). Вы также узнаете, как проверить размер карты с помощью метода size() и, что особенно важно, как обрабатывать случаи, когда сама карта может быть равна null, чтобы избежать потенциальных ошибок NullPointerException. К концу этого практического занятия вы будете хорошо разбираться в определении пустоты Java-коллекций Map в различных сценариях.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashmap("HashMap") subgraph Lab Skills java/operators -.-> lab-559953{{"Как проверить, пуста ли карта (Map) в Java"}} java/if_else -.-> lab-559953{{"Как проверить, пуста ли карта (Map) в Java"}} java/collections_methods -.-> lab-559953{{"Как проверить, пуста ли карта (Map) в Java"}} java/hashmap -.-> lab-559953{{"Как проверить, пуста ли карта (Map) в Java"}} end

Использование метода isEmpty() для проверки Map

На этом этапе мы научимся проверять, является ли Map в Java пустым, используя метод isEmpty(). Map представляет собой коллекцию пар "ключ-значение", и проверка ее на пустоту - это распространенная операция.

Сначала создадим новый Java-файл с именем MapCheck.java в директории ~/project. Для этого можно щелкнуть правой кнопкой мыши в проводнике файлов слева и выбрать "New File", а затем ввести MapCheck.java.

Теперь откройте файл MapCheck.java в редакторе и добавьте следующий код:

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

public class MapCheck {

    public static void main(String[] args) {
        // Create an empty Map
        Map<String, Integer> emptyMap = new HashMap<>();

        // Check if the map is empty using isEmpty()
        boolean isEmpty = emptyMap.isEmpty();

        // Print the result
        System.out.println("Is the map empty? " + isEmpty);

        // Create a non-empty Map
        Map<String, Integer> nonEmptyMap = new HashMap<>();
        nonEmptyMap.put("one", 1);
        nonEmptyMap.put("two", 2);

        // Check if the non-empty map is empty
        boolean isNonEmpty = nonEmptyMap.isEmpty();

        // Print the result
        System.out.println("Is the non-empty map empty? " + isNonEmpty);
    }
}

Разберем этот код по частям:

  • import java.util.HashMap; и import java.util.Map;: Эти строки импортируют необходимые классы для работы с Map.
  • Map<String, Integer> emptyMap = new HashMap<>();: Эта строка создает новый пустой HashMap. HashMap - это распространенная реализация интерфейса Map. Мы указываем, что ключами будут String, а значениями - Integer.
  • boolean isEmpty = emptyMap.isEmpty();: Именно здесь мы используем метод isEmpty(). Он возвращает true, если карта не содержит пар "ключ-значение", и false в противном случае. Результат сохраняется в булевой переменной isEmpty.
  • System.out.println("Is the map empty? " + isEmpty);: Эта строка выводит результат проверки в консоль.
  • Затем код повторяет процесс для nonEmptyMap, чтобы показать, как работает метод isEmpty() при непустой карте.

Сохраните файл MapCheck.java (Ctrl+S или Cmd+S).

Теперь откройте терминал внизу WebIDE. Убедитесь, что вы находитесь в директории ~/project.

Скомпилируйте Java-код с помощью команды javac:

javac MapCheck.java

Если ошибок нет, в директории ~/project будет создан файл MapCheck.class.

Наконец, запустите скомпилированную Java-программу с помощью команды java:

java MapCheck

Вы должны увидеть следующий вывод:

Is the map empty? true
Is the non-empty map empty? false

Этот вывод подтверждает, что метод isEmpty() правильно определил пустую и непустую карты. Использование метода isEmpty() является рекомендуемым способом проверки карты на пустоту, так как он прост и эффективен.

Проверка размера Map с помощью метода size()

На этом этапе мы научимся получать количество пар "ключ-значение" в Map с использованием метода size(). Это полезно, когда вам нужно знать, сколько элементов в настоящее время хранится в карте.

Мы продолжим работу с файлом MapCheck.java, который мы создали на предыдущем этапе. Откройте MapCheck.java в редакторе WebIDE.

Теперь изменим метод main, чтобы включить проверку размера карт. Замените существующий код в методе main следующим:

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

public class MapCheck {

    public static void main(String[] args) {
        // Create an empty Map
        Map<String, Integer> emptyMap = new HashMap<>();

        // Check the size of the empty map using size()
        int emptySize = emptyMap.size();

        // Print the result
        System.out.println("Size of the empty map: " + emptySize);

        // Create a non-empty Map
        Map<String, Integer> nonEmptyMap = new HashMap<>();
        nonEmptyMap.put("one", 1);
        nonEmptyMap.put("two", 2);
        nonEmptyMap.put("three", 3); // Add one more element

        // Check the size of the non-empty map
        int nonEmptySize = nonEmptyMap.size();

        // Print the result
        System.out.println("Size of the non-empty map: " + nonEmptySize);
    }
}

Рассмотрим внесенные изменения:

  • int emptySize = emptyMap.size();: Эта строка вызывает метод size() для emptyMap. Метод size() возвращает количество пар "ключ-значение" в карте в виде целого числа. Результат сохраняется в целочисленной переменной emptySize.
  • System.out.println("Size of the empty map: " + emptySize);: Эта строка выводит размер пустой карты.
  • Мы также добавили дополнительный элемент ("three", 3) в nonEmptyMap, чтобы показать, как меняется размер.
  • int nonEmptySize = nonEmptyMap.size();: Эта строка вызывает метод size() для nonEmptyMap, чтобы получить его размер.
  • System.out.println("Size of the non-empty map: " + nonEmptySize);: Эта строка выводит размер непустой карты.

Сохраните файл MapCheck.java (Ctrl+S или Cmd+S).

Теперь откройте терминал и убедитесь, что вы находитесь в директории ~/project.

Скомпилируйте измененный Java-код:

javac MapCheck.java

Если компиляция прошла успешно, запустите программу:

java MapCheck

Вы должны увидеть следующий вывод:

Size of the empty map: 0
Size of the non-empty map: 3

Этот вывод показывает, что метод size() правильно отобразил количество элементов как в пустой, так и в непустой картах. Метод size() является простым и эффективным способом определения текущего количества записей в Java-коллекции Map.

Обработка null-ссылок на Map

На предыдущих этапах мы работали с картами, которые были либо пустыми, либо содержали элементы. Однако важно рассмотреть, что произойдет, если переменная типа Map имеет значение null. Ссылка null означает, что переменная не указывает на какой-либо объект в памяти. Попытка вызвать метод, такой как isEmpty() или size(), для Map с null-ссылкой приведет к NullPointerException, что является распространенной ошибкой в Java.

На этом этапе мы научимся безопасно обрабатывать потенциальные null-ссылки на карты перед попыткой проверить их пустоту или размер.

Откройте файл MapCheck.java в редакторе WebIDE еще раз.

Добавим код, демонстрирующий и обрабатывающий null-карту. Измените метод main, добавив в него следующее:

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

public class MapCheck {

    public static void main(String[] args) {
        // Create an empty Map
        Map<String, Integer> emptyMap = new HashMap<>();

        // Check the size of the empty map using size()
        int emptySize = emptyMap.size();

        // Print the result
        System.out.println("Size of the empty map: " + emptySize);

        // Create a non-empty Map
        Map<String, Integer> nonEmptyMap = new HashMap<>();
        nonEmptyMap.put("one", 1);
        nonEmptyMap.put("two", 2);
        nonEmptyMap.put("three", 3); // Add one more element

        // Check the size of the non-empty map
        int nonEmptySize = nonEmptyMap.size();

        // Print the result
        System.out.println("Size of the non-empty map: " + nonEmptySize);

        // Declare a Map variable but don't initialize it (it will be null)
        Map<String, Integer> nullMap = null;

        // --- Handling the null map ---

        // Check if the map is null before calling methods
        if (nullMap == null) {
            System.out.println("The nullMap is null.");
        } else {
            // This block will not be executed for nullMap
            System.out.println("Is the nullMap empty? " + nullMap.isEmpty());
            System.out.println("Size of the nullMap: " + nullMap.size());
        }

        // A safer way to check if a map is empty (handles null)
        boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty());
        System.out.println("Is the nullMap considered empty (including null)? " + isNullMapEmpty);

        // A safer way to get the size (handles null)
        int nullMapSize = (nullMap == null) ? 0 : nullMap.size();
        System.out.println("Size of the nullMap (handling null): " + nullMapSize);
    }
}

Вот что мы добавили:

  • Map<String, Integer> nullMap = null;: Эта строка объявляет переменную типа Map, но явно устанавливает ее значение в null.
  • if (nullMap == null) { ... }: Это ключевой момент для обработки null. Мы проверяем, является ли переменная nullMap равной null перед попыткой вызвать на ней какие-либо методы. Если она равна null, мы выводим сообщение. Если бы она не была null, выполнился бы блок else, и мы могли бы безопасно вызвать методы isEmpty() и size().
  • boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty());: Это распространенная конструкция для проверки, является ли карта фактически "пустой", включая случай, когда сама ссылка на карту равна null. Оператор || (логическое ИЛИ) означает, что если nullMap == null истинно, то вся выражение истинно, и nullMap.isEmpty() даже не вычисляется, предотвращая NullPointerException.
  • int nullMapSize = (nullMap == null) ? 0 : nullMap.size();: Здесь используется тернарный оператор (? :) для безопасного получения размера. Если nullMap равно null, то выражение оценивается как 0. В противном случае оно оценивается как nullMap.size().

Сохраните файл MapCheck.java (Ctrl+S или Cmd+S).

Скомпилируйте измененный код в терминале:

javac MapCheck.java

Запустите программу:

java MapCheck

Вы должны увидеть вывод, похожий на следующий:

Size of the empty map: 0
Size of the non-empty map: 3
The nullMap is null.
Is the nullMap considered empty (including null)? true
Size of the nullMap (handling null): 0

Обратите внимание, что строки внутри блока else для nullMap не были выполнены, и мы успешно проверили, является ли nullMap равным null, и получили его размер (считаем null как размер 0) без возникновения ошибки.

Обработка null-ссылок очень важна в Java для предотвращения NullPointerException и создания более надежных программ. Всегда проверяйте, может ли переменная быть равной null перед вызовом методов на ней.

Резюме

В этом практическом занятии (lab) мы научились проверять, является ли Map в Java пустой. Мы изучили основной метод для этого - isEmpty(), который напрямую показывает, содержит ли карта какие-либо пары "ключ-значение". Мы увидели, как применять этот метод как к только что созданным пустым картам, так и к картам, которые были заполнены данными, продемонстрировав его простое использование и булево значение, которое он возвращает.

Помимо базовой проверки с использованием isEmpty(), мы также рассмотрели альтернативные методы, такие как использование size() для определения, равен ли размер карты нулю, что функционально эквивалентно проверке на пустоту. Кроме того, мы обратили внимание на важный аспект обработки потенциальных null-ссылок на карты, чтобы предотвратить NullPointerException, подчеркнув важность проверки на null перед попыткой вызвать методы на объекте карты.