Метод remove() Java LinkedList

Java LinkedList Java LinkedList


remove()Метод — это JavaLinkedListважный метод в классе, используемый для удаления элементов из связанного списка. LinkedList является частью фреймворка коллекций Java и реализует интерфейсы List и Deque.

remove()У метода есть несколько различных форм, каждая из которых имеет своё назначение:

E remove()           // Удаляет и возвращает первый элемент списка
E remove(int index)  // Удаляет элемент в указанной позиции
boolean remove(Object o) // Удаляет первое вхождение указанного элемента

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

remove() — форма без аргументов

Пример

public E remove()

Функция: Удаляет и возвращает первый элемент этого списка.

Параметры: Нет

Возвращаемое значение: Удалённый элемент

Исключения: Выбрасывает исключение, если список пустNoSuchElementException

Пример:

Пример

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

String first = list.remove(); // Удаляет и возвращает "Apple"
System.out.println("Removed: " + first); // Вывод: Removed: Apple
System.out.println(list); // Вывод: [Banana, Cherry]

remove(int index) - С параметром индекса

Пример

public E remove(int index)

Функция: Удаляет элемент в указанной позиции в списке.

Parameters:

  • index- Индекс элемента, который нужно удалить

Возвращаемое значение: Удалённый элемент

Исключения:

  • IndexOutOfBoundsException- Если индекс вне диапазона (index < 0 || index >= size())

Пример:

Пример

LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);

int removed = numbers.remove(1); // Удаляет элемент с индексом 1 (20)
System.out.println("Removed: " + removed); // Вывод: Removed: 20
System.out.println(numbers); // Вывод: [10, 30]

remove(Object o) - С параметром Object

Пример

public boolean remove(Object o)

Функция: Удаляет первое вхождение указанного элемента из списка, если оно существует.

Parameters:

  • o- Элемент, который нужно удалить из списка (если он существует)

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

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

Пример:

Пример

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Apple");

boolean result = fruits.remove("Apple"); // Удаляет первый "Apple"
System.out.println("Removed? " + result); // Вывод: Removed? true
System.out.println(fruits); // Вывод: [Banana, Apple]

Сравнение методов

Форма метода Тип параметра Возвращаемое значение Исключения Назначение
remove() Отсутствует E (тип элемента) NoSuchElementException Удаляет и возвращает первый элемент
remove(int index) int E (тип элемента) IndexOutOfBoundsException Удаляет элемент по указанной позиции
remove(Object o) Object логическое значение Отсутствует Удаляет первое вхождение указанного элемента

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

Соображения производительности

LinkedListremove()производительность методов в различных сценариях:

  1. Удаление головного элемента (remove()илиremove(0)): временная сложность O(1)
  2. Удаление хвостового элемента (remove(size()-1)): временная сложность O(1)
  3. Удаление элемента в середине: временная сложность O(n), так как требуется пройти до указанной позиции

Одновременная модификация

При переборе LinkedList с помощью итератора вызовremove()метода может вызватьConcurrentModificationException. Правильный подход — использовать собственный метод итератораremove()метод.

Неправильный пример:

Пример

LinkedList<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3));
for (Integer num : list) {
    if (num == 2) {
        list.remove(num); // Может выбросить ConcurrentModificationException
    }
}

Правильный подход:

Пример

Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
    Integer num = it.next();
    if (num == 2) {
        it.remove(); // Используйте метод remove() итератора
    }
}

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

LinkedList позволяет хранить значения null. Вы можете использоватьremove(null)чтобы удалить null-элементы из списка.

Пример

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

list.remove(null); // Удаляет null-элементы
System.out.println(list); // Вывод: [A, B]

Примеры практического применения

Реализация очереди

LinkedListremove()метод можно использовать для реализации характеристики FIFO (First-In-First-Out) очереди:

Пример

LinkedList<String> queue = new LinkedList<>();
queue.add("Task1");
queue.add("Task2");
queue.add("Task3");

while (!queue.isEmpty()) {
    String task = queue.remove(); // Удаляет и возвращает первый элемент
    System.out.println("Обработка: " + task);
}

Удаление элементов, соответствующих определённым условиям

Пример

LinkedList<Integer> numbers = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5, 6));

// Удаляет все чётные числа
numbers.removeIf(n -> n % 2 == 0);
System.out.println(numbers); // Вывод: [1, 3, 5]

Сравнение с remove() из ArrayList

Пример

// remove() у LinkedList работает лучше в средних позициях
LinkedList<Integer> linkedList = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
linkedList.remove(2); // Относительно эффективно

// remove() в ArrayList требует сдвига элементов на средних позициях
ArrayList<Integer> arrayList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
arrayList.remove(2); // Требуется сдвиг последующих элементов

Итог

LinkedListremove()метод предоставляет несколько форм для удовлетворения различных потребностей удаления:

  1. remove()- Быстро удаляет головной элемент, подходит для операций с очередью
  2. remove(int index)- Точно управляет позицией удаляемого элемента
  3. remove(Object o)- Удаляет на основе значения элемента

В практических приложениях следует выбирать подходящую форму метода исходя из конкретных потребностей и обращать внимание на их характеристики производительности и исключения. Понимание различий и применимых сценариев этих методов поможет вам более эффективно использовать LinkedList — важный класс коллекции.

Java LinkedList Java LinkedList

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