Как проверить, содержит ли множество (Set) определенный элемент в Java

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

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

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/collections_methods -.-> lab-559973{{"Как проверить, содержит ли множество (Set) определенный элемент в Java"}} java/encapsulation -.-> lab-559973{{"Как проверить, содержит ли множество (Set) определенный элемент в Java"}} java/arraylist -.-> lab-559973{{"Как проверить, содержит ли множество (Set) определенный элемент в Java"}} java/object_methods -.-> lab-559973{{"Как проверить, содержит ли множество (Set) определенный элемент в Java"}} end

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

На этом этапе мы рассмотрим, как проверить, существует ли определенный элемент в коллекции на Java. Коллекции - это фундаментальные структуры данных, используемые для группировки нескольких элементов в единый блок. Java предоставляет различные типы коллекций, такие как списки (Lists), множества (Sets) и отображения (Maps).

Одна из распространенных задач при работе с коллекциями - определить, присутствует ли конкретный элемент. Интерфейс Collection в Java, являющийся корневым интерфейсом для всех типов коллекций, предоставляет удобный метод для этой цели: contains().

Метод contains() принимает один аргумент - элемент, наличие которого вы хотите проверить, и возвращает логическое значение: true, если элемент найден в коллекции, и false в противном случае.

Создадим простую Java - программу, чтобы показать, как использовать метод contains() с ArrayList, который является распространенным типом списка.

  1. Откройте файл HelloJava.java в редакторе WebIDE, если он еще не открыт.

  2. Замените все содержимое файла следующим кодом:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List of strings
            List<String> fruits = new ArrayList<>();
    
            // Add some fruits to the list
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
            fruits.add("Mango");
    
            // Check if the list contains "Banana"
            boolean hasBanana = fruits.contains("Banana");
            System.out.println("Does the list contain Banana? " + hasBanana);
    
            // Check if the list contains "Grape"
            boolean hasGrape = fruits.contains("Grape");
            System.out.println("Does the list contain Grape? " + hasGrape);
        }
    }

    Разберем этот новый код:

    • import java.util.ArrayList; и import java.util.List;: Эти строки импортируют необходимые классы для работы со списками (Lists) и ArrayList.
    • List<String> fruits = new ArrayList<>();: Эта строка создает новый ArrayList, который может хранить объекты типа String, и присваивает его переменной с именем fruits.
    • fruits.add("Apple"); и аналогичные строки: Эти строки добавляют элементы (строки, представляющие названия фруктов) в наш список fruits.
    • boolean hasBanana = fruits.contains("Banana");: Эта строка вызывает метод contains() для списка fruits, проверяя, присутствует ли строка "Banana". Результат (true или false) сохраняется в логической переменной hasBanana.
    • System.out.println("Does the list contain Banana? " + hasBanana);: Эта строка выводит результат проверки наличия "Banana".
    • boolean hasGrape = fruits.contains("Grape"); и следующая строка println: Эти строки выполняют ту же проверку для "Grape", который отсутствует в нашем списке.
  3. Сохраните файл (Ctrl + S или Cmd + S).

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

    javac HelloJava.java
  5. Запустите скомпилированную программу:

    java HelloJava

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

    Does the list contain Banana? true
    Does the list contain Grape? false

Этот вывод подтверждает, что метод contains() правильно определил, что "Banana" присутствует в списке, а "Grape" - нет.

Понимание того, как проверять наличие элементов, является фундаментальным навыком при работе с коллекциями в Java. В следующих шагах мы рассмотрим более подробно метод contains() и его поведение в различных сценариях.

Тестирование с разными типами элементов

На предыдущем этапе мы использовали метод contains() с списком (List) объектов типа String. Метод contains() является универсальным и может быть использован с коллекциями, которые хранят различные типы элементов, таких как числа, пользовательские объекты или даже другие коллекции.

При использовании метода contains() Java использует метод equals() объектов в коллекции, чтобы определить, совпадает ли искомый элемент. Для примитивных типов (например, int, double, boolean) используются соответствующие обертки (Integer, Double, Boolean), и их методы equals() сравнивают значения. Для объектов по умолчанию метод equals() проверяет, указывают ли два объекта на одну и ту же область памяти. Однако многие классы (например, String, Integer и др.) переопределяют метод equals() для сравнения фактического содержимого или значения объектов.

Давайте модифицируем нашу программу, чтобы работать со списком (List) объектов типа Integer, и посмотрим, как работает метод contains().

  1. Откройте файл HelloJava.java в редакторе WebIDE.

  2. Замените текущий код следующим:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List of integers
            List<Integer> numbers = new ArrayList<>();
    
            // Add some numbers to the list
            numbers.add(10);
            numbers.add(25);
            numbers.add(5);
            numbers.add(50);
    
            // Check if the list contains 25
            boolean hasTwentyFive = numbers.contains(25);
            System.out.println("Does the list contain 25? " + hasTwentyFive);
    
            // Check if the list contains 100
            boolean hasOneHundred = numbers.contains(100);
            System.out.println("Does the list contain 100? " + hasOneHundred);
    
            // Check if the list contains the Integer object with value 5
            boolean hasFiveObject = numbers.contains(Integer.valueOf(5));
            System.out.println("Does the list contain Integer object with value 5? " + hasFiveObject);
        }
    }

    В этом коде:

    • Мы создаем список (List), который хранит объекты типа Integer: List<Integer> numbers = new ArrayList<>();.
    • Мы добавляем целочисленные значения в список с помощью метода numbers.add(). Java автоматически преобразует примитивные значения int (10, 25, 5, 50) в объекты Integer (это называется автоупаковкой - autoboxing).
    • Мы используем numbers.contains(25) и numbers.contains(100) для проверки наличия целочисленных значений. Опять же, Java автоупаковывает примитивные значения int 25 и 100 в объекты Integer перед выполнением проверки.
    • Мы также явно создаем объект Integer с помощью Integer.valueOf(5) и проверяем, содержит ли список этот конкретный объект.
  3. Сохраните файл.

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

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

    java HelloJava

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

    Does the list contain 25? true
    Does the list contain 100? false
    Does the list contain Integer object with value 5? true

Это показывает, что метод contains() корректно работает с объектами Integer, сравнивая их значения. Метод contains() эффективно использует метод equals() элементов в коллекции и искомого элемента.

На следующем этапе мы рассмотрим особый случай: обработку элементов null с помощью метода contains().

Обработка нулевых элементов (null elements)

В Java коллекции иногда могут содержать элементы со значением null. Важно понимать, как метод contains() ведет себя при работе с null.

Хорошая новость в том, что метод contains() разработан так, чтобы корректно обрабатывать элементы со значением null. Если коллекция содержит null, вызов contains(null) вернет true. Если коллекция не содержит null, он вернет false. Это соответствует тому, как обычно реализован метод equals() для null (для любого объекта вызов equals(null) должен вернуть false, но вызов null.equals(anyObject) вызовет исключение NullPointerException, если это не обрабатывается внутри реализации метода contains() коллекции).

Давайте модифицируем нашу программу, чтобы включить и проверить наличие элементов со значением null.

  1. Откройте файл HelloJava.java в редакторе WebIDE.

  2. Замените текущий код следующим:

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List that can contain null
            List<String> mixedList = new ArrayList<>();
    
            // Add some elements, including null
            mixedList.add("First");
            mixedList.add(null); // Adding a null element
            mixedList.add("Second");
            mixedList.add(null); // Adding another null element
            mixedList.add("Third");
    
            // Check if the list contains null
            boolean hasNull = mixedList.contains(null);
            System.out.println("Does the list contain null? " + hasNull);
    
            // Check if the list contains a non-existent element
            boolean hasFourth = mixedList.contains("Fourth");
            System.out.println("Does the list contain Fourth? " + hasFourth);
    
            // Check if the list contains "First"
            boolean hasFirst = mixedList.contains("First");
            System.out.println("Does the list contain First? " + hasFirst);
        }
    }

    В этом коде:

    • Мы создаем список (List) с именем mixedList.
    • Мы добавляем несколько строковых элементов и явно добавляем null с помощью mixedList.add(null);.
    • Затем мы используем mixedList.contains(null) для проверки, содержит ли список элемент со значением null.
    • Мы также выполняем проверки для несуществующей строки ("Fourth") и существующей строки ("First"), чтобы увидеть результаты наряду с проверкой на null.
  3. Сохраните файл.

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

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

    java HelloJava

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

    Does the list contain null? true
    Does the list contain Fourth? false
    Does the list contain First? true

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

Теперь вы узнали, как использовать метод contains() для проверки наличия элементов в Java - коллекциях, включая разные типы данных и особый случай null. Это ценный инструмент при работе с коллекциями в ваших Java - программах.

Резюме

В этом практическом занятии (lab) мы узнали, как проверить, содержит ли коллекция в Java определенный элемент с использованием метода contains(). Мы увидели, как этот метод, доступный через интерфейс Collection, возвращает логическое значение (boolean), указывающее на наличие элемента. Мы продемонстрировали его использование с ArrayList и увидели, как он правильно определяет существующие и несуществующие элементы.

Мы также изучили, как метод contains() работает с разными типами данных и как обрабатывать нулевые элементы (null elements) в коллекции. Этот практический опыт дал нам понимание фундаментальной операции при работе с коллекциями в Java.