Рубрики
Без рубрики

Удалите первый элемент из списка

Краткий обзор нескольких способов удаления первого элемента из списка в Java.

Автор оригинала: baeldung.

1. Обзор

В этом супер-быстром уроке мы покажем, как удалить первый элемент из списка /.

Мы выполним эту операцию для двух распространенных реализаций интерфейса ListArrayList и LinkedList .

2. Создание списка

Во-первых, давайте заполним наш Список s:

@Before
public void init() {
    list.add("cat");
    list.add("dog");
    list.add("pig");
    list.add("cow");
    list.add("goat");

    linkedList.add("cat");
    linkedList.add("dog");
    linkedList.add("pig");
    linkedList.add("cow");
    linkedList.add("goat");
}

3. ArrayList

Во-вторых, давайте удалим первый элемент из ArrayList, и убедимся, что наш список больше не содержит его:

@Test
public void givenList_whenRemoveFirst_thenRemoved() {
    list.remove(0);

    assertThat(list, hasSize(4));
    assertThat(list, not(contains("cat")));
}

Как показано выше, мы используем метод remove(index) для удаления первого элемента – это также будет работать для любой реализации интерфейса List .

4. Связанный список

LinkedList также реализует метод remove(index) (по-своему), но у него также есть метод removeFirst () .

Давайте убедимся, что он работает так, как ожидалось:

@Test
public void givenLinkedList_whenRemoveFirst_thenRemoved() {
    linkedList.removeFirst();

    assertThat(linkedList, hasSize(4));
    assertThat(linkedList, not(contains("cat")));
}

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

Хотя методы выглядят похожими, их эффективность отличается. ArrayList ‘s remove() метод требует O(n) времени, тогда как LinkedList ‘s removeFirst() метод требует O(1) времени.

Это связано с тем, что ArrayList использует массив под капотом, а операция remove() требует копирования остальной части массива в начало. Чем больше массив, тем больше элементов необходимо сдвинуть.

В отличие от этого, Linked List использует указатели, означающие, что каждый элемент указывает на следующий и предыдущий.

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

6. Заключение

В этой статье мы рассмотрели, как удалить первый элемент из списка , и сравнили эффективность этой операции для реализаций ArrayList и LinkedList .

Как обычно, полный исходный код доступен на GitHub .