Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, существует ли определенный элемент в коллекции на Java. Мы сосредоточимся на использовании метода contains(), который доступен для всех типов коллекций. Вы будете практиковать использование метода contains() с разными типами элементов и узнаете, как обрабатывать нулевые (null) элементы. К концу этого практического занятия вы будете свободно определять наличие элементов в коллекциях Java.
Использование метода contains() для проверки элемента
На этом этапе мы рассмотрим, как проверить, существует ли определенный элемент в коллекции на Java. Коллекции - это фундаментальные структуры данных, используемые для группировки нескольких элементов в единый блок. Java предоставляет различные типы коллекций, такие как списки (Lists), множества (Sets) и отображения (Maps).
Одна из распространенных задач при работе с коллекциями - определить, присутствует ли конкретный элемент. Интерфейс Collection в Java, являющийся корневым интерфейсом для всех типов коллекций, предоставляет удобный метод для этой цели: contains().
Метод contains() принимает один аргумент - элемент, наличие которого вы хотите проверить, и возвращает логическое значение: true, если элемент найден в коллекции, и false в противном случае.
Создадим простую Java - программу, чтобы показать, как использовать метод contains() с ArrayList, который является распространенным типом списка.
Откройте файл
HelloJava.javaв редакторе WebIDE, если он еще не открыт.Замените все содержимое файла следующим кодом:
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", который отсутствует в нашем списке.
Сохраните файл (Ctrl + S или Cmd + S).
Скомпилируйте модифицированную программу в терминале:
javac HelloJava.javaЗапустите скомпилированную программу:
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().
Откройте файл
HelloJava.javaв редакторе WebIDE.Замените текущий код следующим:
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 автоупаковывает примитивные значенияint25 и 100 в объектыIntegerперед выполнением проверки. - Мы также явно создаем объект
Integerс помощьюInteger.valueOf(5)и проверяем, содержит ли список этот конкретный объект.
- Мы создаем список (
Сохраните файл.
Скомпилируйте программу в терминале:
javac HelloJava.javaЗапустите программу:
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) элементов
В Java коллекции иногда могут содержать элементы со значением null. Важно понимать, как метод contains() ведет себя при работе с null.
Хорошая новость в том, что метод contains() разработан так, чтобы корректно обрабатывать элементы со значением null. Если коллекция содержит null, вызов contains(null) вернет true. Если коллекция не содержит null, он вернет false. Это соответствует тому, как обычно реализован метод equals() для null (для любого объекта вызов equals(null) должен вернуть false, но вызов null.equals(anyObject) вызовет исключение NullPointerException, если это не обрабатывается внутри реализации метода contains() коллекции).
Давайте модифицируем нашу программу, чтобы включить и проверить наличие элементов со значением null.
Откройте файл
HelloJava.javaв редакторе WebIDE.Замените текущий код следующим:
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.
- Мы создаем список (
Сохраните файл.
Скомпилируйте программу в терминале:
javac HelloJava.javaЗапустите программу:
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.



