Remover o primeiro elemento de uma lista
1. Visão geral
Neste tutorial super rápido, mostraremos como remover o primeiro elemento de umList.
Vamos realizar esta operação para duas implementações comuns da interfaceList -ArrayListeLinkedList.
2. Criando umList
Em primeiro lugar, vamos preencher nossoLists:
@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
Em segundo lugar, vamos remover o primeiro elemento deArrayList,e garantir que nossa lista não o contenha mais:
@Test
public void givenList_whenRemoveFirst_thenRemoved() {
list.remove(0);
assertThat(list, hasSize(4));
assertThat(list, not(contains("cat")));
}
Conforme mostrado acima, estamos usando o métodoremove(index) para remover o primeiro elemento -this will also work for any implementation of the List interface.
4. LinkedList
LinkedList também implementa o métodoremove(index) (à sua maneira), mas também tem o métodoremoveFirst().
Vamos nos certificar de que funcione conforme o esperado:
@Test
public void givenLinkedList_whenRemoveFirst_thenRemoved() {
linkedList.removeFirst();
assertThat(linkedList, hasSize(4));
assertThat(linkedList, not(contains("cat")));
}
5. Complexidade temporal
Embora os métodos pareçam semelhantes, sua eficiência é diferente. O método deArrayListremove() requer tempo O (n), enquanto o método deLinkedListremoveFirst() requer tempo O (1).
Isso ocorre porqueArrayList usa uma matriz subjacente e a operaçãoremove() requer a cópia do resto da matriz para o início. Quanto maior a matriz, mais elementos precisam ser alterados.
Ao contrário disso,LinkedList usa ponteiros, o que significa que cada elemento aponta para o próximo e para o anterior.
Portanto, remover o primeiro elemento significa apenas mudar o ponteiro para o primeiro elemento. Essa operação sempre exige o mesmo tempo, não dependendo do tamanho de uma lista.
6. Conclusão
Neste artigo, cobrimos como remover o primeiro elemento de umList,e comparamos a eficiência dessa operação para simplificações deArrayListeLinkedList .
Como de costume, o código-fonte completo está disponívelover on GitHub.