java 移除列表中的第一个元素

评论 0 浏览 0 2018-07-27

1.概述

在这个超级快速的教程中,我们将展示如何从一个List中移除第一个元素。

我们将对List接口的两种常见实现进行这一操作 – ArrayListLinkedList

2.创建一个列表

首先,让我们来填充我们的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)方法来删除第一个元素 – 这也将对任何List接口的实现起作用

4. LinkedList

LinkedList也实现了remove(index)方法(以它自己的方式),但它也有removeFirst()方法。

让我们确保它能像预期的那样工作。

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

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

5.时间的复杂性

虽然这些方法看起来很相似,但它们的效率却不同。ArrayListremove()方法需要O(n)时间,而LinkedListremoveFirst()方法需要O(1)时间。

这是因为ArrayList在引擎盖下使用了一个数组,而remove()操作需要将数组的其余部分复制到开头。数组越大,需要移位的元素就越多。

与此不同的是,LinkedList使用指针,意味着每个元素都指向下一个和上一个元素。

因此,删除第一个元素意味着只是改变第一个元素的指针。这个操作总是需要相同的时间,不取决于列表的大小。

6.结语

在这篇文章中,我们已经介绍了如何从List中移除第一个元素,并且比较了ArrayListLinkedList实现的效率。

像往常一样,完整的源代码可以在GitHub上找到。

最后更新2022-12-24
0 个评论
标签