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

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

1. обзор

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

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

2. СозданиеList

Во-первых, заполним нашLists:

@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) для удаления первого элемента -this will also work for any implementation of the List interface.

4. LinkedListс

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

Убедимся, что все работает как надо:

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

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

5. Сложность времени

Хотя методы выглядят одинаково, их эффективность отличается. МетодArrayList‘sremove() требует O (n) времени, тогда как методLinkedList ’sremoveFirst() требует O (1) времени.

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

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

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

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

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

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