java 移除列表中的第一个元素
评论 0
浏览 0
2018-07-27
1.概述
在这个超级快速的教程中,我们将展示如何从一个List中移除第一个元素。
我们将对List接口的两种常见实现进行这一操作 – ArrayList和LinkedList。
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.时间的复杂性
虽然这些方法看起来很相似,但它们的效率却不同。ArrayList的remove()方法需要O(n)时间,而LinkedList的removeFirst()方法需要O(1)时间。
这是因为ArrayList在引擎盖下使用了一个数组,而remove()操作需要将数组的其余部分复制到开头。数组越大,需要移位的元素就越多。
与此不同的是,LinkedList使用指针,意味着每个元素都指向下一个和上一个元素。
因此,删除第一个元素意味着只是改变第一个元素的指针。这个操作总是需要相同的时间,不取决于列表的大小。
6.结语
在这篇文章中,我们已经介绍了如何从List中移除第一个元素,并且比较了ArrayList和LinkedList实现的效率。
像往常一样,完整的源代码可以在GitHub上找到。
0 个评论