Метод contains() класса LinkedList в Java

Java LinkedList Java LinkedList


contains()Метод, в Java, являетсяLinkedListраспространённый метод, предоставляемый классом, используемый для проверки, содержит ли связный список указанный элемент. Этот метод принадлежитjava.util.LinkedListклассу и наследуется отjava.util.AbstractCollectionclass.

Синтаксис метода

public boolean contains(Object o)

Возвращаемое значение

  • Если связный список содержит указанный элемент, он возвращаетtrue
  • Если он не содержит указанный элемент, он возвращаетfalse

Подробности метода

Как это работает

contains()Метод перебирает каждый элемент в связном списке и используетequals()метод для сравнения каждого элемента с целевым объектом. Если найден совпадающий элемент, он немедленно возвращаетtrue; если весь связный список пройден без нахождения совпадающего элемента, он возвращаетfalse。

Временная сложность

ПосколькуLinkedListявляется двусвязным списком,contains()Метод должен выполнять последовательный поиск с начала связного списка, поэтому его временная сложность — O(n), где n — количество элементов в связном списке.


Примеры использования

Базовое использование

Пример

import java.util.LinkedList;

public class LinkedListContainsExample {
    public static void main(String[] args) {
        // Создаём LinkedList
        LinkedList<String> fruits = new LinkedList<>();
       
        // Добавить элементы
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
       
        // Проверить, существует ли элемент
        System.out.println("Содержит Apple? " + fruits.contains("Apple"));  // Вывод: true
        System.out.println("Contains Grape? " + fruits.contains("Grape")); // Вывод: false
    }
}

Использование пользовательских объектов

При использовании пользовательских объектов необходимо правильно переопределитьequals()метод, в противном случаеcontains()метод может работать не так, как ожидалось.

Пример

import java.util.LinkedList;

class Person {
    private String name;
    private int age;
   
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
   
    // Переопределить метод equals
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return истина;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return age == person.age && name.equals(person.name);
    }
   
    // Переопределить метод hashCode
    @Override
    public int hashCode() {
        return 31 * name.hashCode() + age;
    }
}

public class CustomObjectExample {
    public static void main(String[] args) {
        LinkedList<Person> people = new LinkedList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 30));
       
        Person alice = new Person("Alice", 25);
        System.out.println("Содержит ли Alice? " + people.contains(alice)); // Вывод: true
    }
}

Примечания

1. Обработка значений null

LinkedListПозволяет содержатьnullзначения, вы можете использоватьcontains(null)чтобы проверить, содержит ли связанный списокnullзначение.

Пример

LinkedList<String> list = new LinkedList<>();
list.add(null);
System.out.println(list.contains(null)); // Вывод: true

2. Вопросы производительности

Посколькуcontains()метод должен пройти по связному списку. Для больших связных списков частые вызовы этого метода могут повлиять на производительность. Если вам нужно часто проверять, существует ли элемент, можно рассмотреть использованиеHashSetи другие структуры данных, которые лучше подходят для поиска.

3. Важность метода equals()

contains()Метод полагается наequals()метод сравнения объектов элемента. Если пользовательский класс не переопределяет корректноequals()метод,contains()метод может неправильно определять равные объекты.


Сравнение с другими методами

contains() против indexOf()

  • contains(): возвращает boolean, только проверяет, существует ли элемент
  • indexOf(): возвращает int, возвращает индекс первого вхождения элемента или -1, если он не существует

Пример

LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("A");

System.out.println(list.contains("A"));  // Вывод: true
System.out.println(list.indexOf("A"));   // Вывод: 0

contains() против containsAll()

  • contains(): проверяет, существует ли один элемент
  • containsAll(): проверяет, содержит ли он все элементы указанной коллекции

Пример

LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");

System.out.println(list.contains("A"));  // Вывод: true

List<String> checkList = Arrays.asList("A", "B");
System.out.println(list.containsAll(checkList)); // Вывод: true

Итог

LinkedListизcontains()Метод — простой, но практичный инструмент для проверки наличия конкретного элемента в связном списке. Понимание того, как он работает, и правильное его использование очень важно для написания эффективных программ на Java. Запомните следующие моменты:

  1. contains()Метод используетequals()для сравнения элементов
  2. Для пользовательских объектов необходимо правильно переопределитьequals()иhashCode()method
  3. Этот метод имеет временную сложность O(n) и не подходит для частого использования на больших связных списках
  4. Вы можете выбрать в зависимости от конкретных потребностейindexOf()илиcontainsAll()и другие альтернативные методы

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

Java LinkedList Java LinkedList

Другие расширения