Как проверить, пусто ли множество в Java

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

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

Введение

В этом лабораторном занятии (LabEx) вы научитесь проверять, пусто ли множество (Set) в Java. Мы рассмотрим стандартный метод isEmpty(), простой и эффективный способ определить, содержит ли множество какие-либо элементы.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashset("HashSet") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/if_else -.-> lab-559975{{"Как проверить, пусто ли множество в Java"}} java/collections_methods -.-> lab-559975{{"Как проверить, пусто ли множество в Java"}} java/hashset -.-> lab-559975{{"Как проверить, пусто ли множество в Java"}} java/object_methods -.-> lab-559975{{"Как проверить, пусто ли множество в Java"}} end

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

На этом шаге мы научимся проверять, пусто ли множество (Set) в Java с помощью метода isEmpty(). Множество (Set) представляет собой коллекцию, которая не может содержать дубликаты элементов. Метод isEmpty() является простым и эффективным способом определить, содержит ли коллекция какие-либо элементы.

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

  2. Откройте файл SetCheck.java в редакторе и добавьте следующий код:

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Create a new HashSet
            Set<String> fruits = new HashSet<>();
    
            // Check if the set is empty using isEmpty()
            boolean isEmptyBeforeAdd = fruits.isEmpty();
            System.out.println("Is the fruits set empty before adding elements? " + isEmptyBeforeAdd);
    
            // Add some elements to the set
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
    
            // Check if the set is empty after adding elements
            boolean isEmptyAfterAdd = fruits.isEmpty();
            System.out.println("Is the fruits set empty after adding elements? " + isEmptyAfterAdd);
        }
    }

    Разберём новые части этого кода:

    • import java.util.HashSet; и import java.util.Set;: Эти строки импортируют необходимые классы для работы с Set и HashSet.
    • Set<String> fruits = new HashSet<>();: Эта строка создаёт новый объект HashSet с именем fruits. Мы указываем <String>, чтобы показать, что это множество будет хранить объекты типа String.
    • boolean isEmptyBeforeAdd = fruits.isEmpty();: Эта строка вызывает метод isEmpty() для множества fruits и сохраняет результат (либо true, либо false) в булевой переменной с именем isEmptyBeforeAdd.
    • fruits.add("Apple");: Эта строка добавляет строку "Apple" в множество fruits.
    • boolean isEmptyAfterAdd = fruits.isEmpty();: Эта строка снова проверяет, пусто ли множество после добавления элементов.
  3. Сохраните файл SetCheck.java (Ctrl+S или Cmd+S).

  4. Теперь скомпилируем Java-программу. Откройте терминал внизу WebIDE и убедитесь, что вы находитесь в директории ~/project. Затем выполните следующую команду:

    javac SetCheck.java

    Если компиляция прошла успешно, вы не увидите никакого вывода.

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

    java SetCheck

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

    Is the fruits set empty before adding elements? true
    Is the fruits set empty after adding elements? false

    Этот вывод подтверждает, что метод isEmpty() правильно отчёл о состоянии множества до и после добавления элементов.

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

На предыдущем шаге мы научились проверять, пусто ли множество (Set) с помощью метода isEmpty(). Еще одна распространенная операция - узнать, сколько элементов содержится в множестве (Set). Для этого мы используем метод size(). Метод size() возвращает количество элементов, находящихся в множестве в данный момент.

  1. Откройте файл SetCheck.java в директории ~/project в редакторе WebIDE.

  2. Измените метод main, чтобы он включал вызовы метода size(). Замените существующий метод main следующим кодом:

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Create a new HashSet
            Set<String> fruits = new HashSet<>();
    
            // Check the size of the set before adding elements
            int sizeBeforeAdd = fruits.size();
            System.out.println("Size of the fruits set before adding elements: " + sizeBeforeAdd);
    
            // Add some elements to the set
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
    
            // Check the size of the set after adding elements
            int sizeAfterAdd = fruits.size();
            System.out.println("Size of the fruits set after adding elements: " + sizeAfterAdd);
    
            // Add a duplicate element (Sets do not allow duplicates)
            fruits.add("Apple");
    
            // Check the size again
            int sizeAfterDuplicateAdd = fruits.size();
            System.out.println("Size of the fruits set after adding a duplicate: " + sizeAfterDuplicateAdd);
        }
    }

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

    • int sizeBeforeAdd = fruits.size();: Эта строка вызывает метод size() для множества fruits и сохраняет возвращаемое целочисленное значение (количество элементов) в переменной с именем sizeBeforeAdd.
    • int sizeAfterAdd = fruits.size();: Эта строка проверяет размер множества после добавления трех начальных элементов.
    • fruits.add("Apple");: Мы пытаемся добавить "Apple" еще раз. Поскольку "Apple" уже находится в множестве, эта операция не изменит содержимое множества.
    • int sizeAfterDuplicateAdd = fruits.size();: Эта строка проверяет размер множества после попытки добавить дубликат.
  3. Сохраните файл SetCheck.java.

  4. Скомпилируйте измененную Java-программу в терминале:

    javac SetCheck.java

    Опять же, отсутствие вывода означает успешную компиляцию.

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

    java SetCheck

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

    Size of the fruits set before adding elements: 0
    Size of the fruits set after adding elements: 3
    Size of the fruits set after adding a duplicate: 3

    Этот вывод показывает, что метод size() правильно сообщает количество элементов, и что добавление дубликатного элемента не увеличивает размер множества.

Обработка нулевых множеств

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

  1. Откройте файл SetCheck.java в директории ~/project в редакторе WebIDE.

  2. Измените метод main, чтобы продемонстрировать, как обрабатывать нулевое множество (null set). Замените существующий метод main следующим кодом:

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Declare a Set variable but initialize it to null
            Set<String> colors = null;
    
            // Attempting to call isEmpty() or size() here would cause a NullPointerException
            // System.out.println("Is the colors set empty? " + colors.isEmpty()); // This would crash!
    
            // To safely check if a set is null or empty, we first check for null
            if (colors == null) {
                System.out.println("The colors set is null.");
            } else {
                // If it's not null, we can safely check if it's empty
                if (colors.isEmpty()) {
                    System.out.println("The colors set is empty.");
                } else {
                    System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
                }
            }
    
            // Now, let's initialize the set and add elements
            colors = new HashSet<>();
            colors.add("Red");
            colors.add("Blue");
    
            // Check again after initialization and adding elements
            if (colors == null) {
                System.out.println("The colors set is null.");
            } else {
                if (colors.isEmpty()) {
                    System.out.println("The colors set is empty.");
                } else {
                    System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
                }
            }
        }
    }

    В этом обновленном коде:

    • Set<String> colors = null;: Мы объявляем переменную colors типа Set, но явно устанавливаем ее значение в null.
    • Мы закомментировали строку, которая вызовет ошибку NullPointerException.
    • if (colors == null): Это важная проверка. Перед вызовом любых методов для переменной colors мы сначала проверяем, имеет ли она значение null.
    • Если colors не равно null, мы затем проверяем, пусто ли множество с помощью colors.isEmpty(), или получаем его размер с помощью colors.size().
    • Затем мы инициализируем colors новым объектом HashSet и добавляем элементы, чтобы показать другой вывод, когда множество не равно null и не пусто.
  3. Сохраните файл SetCheck.java.

  4. Скомпилируйте программу в терминале:

    javac SetCheck.java
  5. Запустите программу:

    java SetCheck

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

    The colors set is null.
    The colors set is not empty and has 2 elements.

    Это демонстрирует, как безопасно обрабатывать потенциальные нулевые значения (null values) для переменной типа Set перед попыткой доступа к ее методам. Всегда проверяйте на null сначала, когда работаете с ссылками на объекты, которые могут быть не инициализированы.

Резюме

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