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

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

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

Введение

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

Сначала вы узнаете, как использовать удобный метод contains(), предоставляемый интерфейсом List. Затем вы поймете, как вручную перебирать элементы списка для проверки наличия определенного элемента, что может быть полезно в определенных сценариях. Наконец, мы рассмотрим, как обрабатывать наличие нулевых (null) элементов в списке при выполнении этих проверок.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") subgraph Lab Skills java/if_else -.-> lab-559945{{"Как проверить, содержит ли список определенный элемент в Java"}} java/for_loop -.-> lab-559945{{"Как проверить, содержит ли список определенный элемент в Java"}} java/strings -.-> lab-559945{{"Как проверить, содержит ли список определенный элемент в Java"}} java/collections_methods -.-> lab-559945{{"Как проверить, содержит ли список определенный элемент в Java"}} java/arraylist -.-> lab-559945{{"Как проверить, содержит ли список определенный элемент в Java"}} end

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

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

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

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

import java.util.ArrayList;
import java.util.List;

public class ListContains {

    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;: Эти строки импортируют необходимые классы для работы со списками.
  • List<String> fruits = new ArrayList<>();: Эта строка создает новый ArrayList, который является типом List, способным хранить объекты типа String.
  • fruits.add("...");: Эти строки добавляют элементы (названия фруктов) в наш список.
  • fruits.contains("Banana");: Это основа данного этапа. Метод contains() вызывается для списка fruits. Он принимает один аргумент - элемент, наличие которого мы хотим проверить. Он возвращает true, если элемент найден в списке, и false в противном случае.
  • boolean hasBanana = ...;: Результат вызова contains() сохраняется в булевой переменной (hasBanana или hasGrape).
  • System.out.println("...");: Эти строки выводят результаты в консоль.

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

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

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

javac ListContains.java

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

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

java ListContains

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

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

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

Ручное перебор элементов списка

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

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

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

import java.util.ArrayList;
import java.util.List;

public class ListContains {

    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");

        // Loop through the list using a for loop
        System.out.println("Printing fruits in the list:");
        for (int i = 0; i < fruits.size(); i++) {
            String fruit = fruits.get(i);
            System.out.println(fruit);
        }
    }
}

Рассмотрим новые части кода:

  • System.out.println("Printing fruits in the list:");: Эта строка просто выводит заголовок перед тем, как мы начнем перечислять фрукты.
  • for (int i = 0; i < fruits.size(); i++): Это стандартный цикл for.
    • int i = 0: Мы инициализируем счетчик i значением 0. В программировании счет часто начинается с 0.
    • i < fruits.size(): Цикл продолжается, пока значение i меньше общего количества элементов в списке fruits. Метод fruits.size() возвращает количество элементов в списке.
    • i++: После каждого выполнения цикла мы увеличиваем значение i на 1.
  • String fruit = fruits.get(i);: Внутри цикла метод fruits.get(i) извлекает элемент из списка, находящийся в текущей позиции i. Мы сохраняем этот элемент в переменную типа String с именем fruit.
  • System.out.println(fruit);: Эта строка выводит текущий фрукт в консоль.

Сохраните файл ListContains.java.

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

javac ListContains.java

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

java ListContains

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

Printing fruits in the list:
Apple
Banana
Orange
Mango

Это показывает, что наш цикл for успешно перебрал все элементы списка и вывел каждый фрукт на отдельной строке. Ручной перебор элементов списка таким образом позволяет вам лучше контролировать обработку каждого элемента, что может быть полезно для более сложных задач, чем просто проверка наличия элемента.

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

В реальном мире списки могут иногда содержать значения null, которые обозначают отсутствие значения. Если вы попытаетесь выполнить операции над значением null без предварительной проверки, ваша программа может завершиться аварийно с ошибкой NullPointerException. На этом этапе мы научимся обрабатывать нулевые элементы при переборе списка.

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

Мы изменим код, добавив элемент со значением null в список и проверив его наличие внутри цикла. Замените существующий метод main следующим кодом:

import java.util.ArrayList;
import java.util.List;

public class ListContains {

    public static void main(String[] args) {
        // Create a List of strings
        List<String> fruits = new ArrayList<>();

        // Add some fruits to the list, including a null
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add(null); // Adding a null element
        fruits.add("Orange");
        fruits.add("Mango");

        // Loop through the list and handle null elements
        System.out.println("Printing fruits in the list (handling nulls):");
        for (int i = 0; i < fruits.size(); i++) {
            String fruit = fruits.get(i);

            // Check if the element is null before processing
            if (fruit != null) {
                System.out.println(fruit);
            } else {
                System.out.println("Found a null element");
            }
        }
    }
}

Вот что мы изменили:

  • fruits.add(null);: Мы добавили значение null в список.
  • if (fruit != null): Внутри цикла, перед тем как попытаться вывести значение fruit, мы добавили оператор if для проверки, не является ли переменная fruit равной null.
  • System.out.println(fruit);: Эта строка находится внутри блока if, поэтому она будет выполняться только в том случае, если fruit не равно null.
  • else { System.out.println("Found a null element"); }: Этот блок else выполняется, если fruit равно null, выводя сообщение вместо попытки вывести само нулевое значение.

Сохраните файл ListContains.java.

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

javac ListContains.java

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

java ListContains

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

Printing fruits in the list (handling nulls):
Apple
Banana
Found a null element
Orange
Mango

Как вы можете видеть, программа теперь правильно определяет и обрабатывает нулевой элемент без аварийного завершения. Проверка на null является важной практикой в программировании на Java для предотвращения ошибок и создания более надежных программ.

Резюме

В этом практическом занятии (лабораторной работе) мы научились проверять, содержит ли Java-список (List) определенный элемент. Сначала мы изучили самый простой способ - использование встроенного метода contains(), который эффективно определяет наличие элемента и возвращает логическое значение (boolean).

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