Supprimer le premier élément d’une liste

Supprimer le premier élément d'une liste

1. Vue d'ensemble

Dans ce didacticiel ultra-rapide, nous allons montrer comment supprimer le premier élément d'unList.

Nous allons effectuer cette opération pour deux implémentations courantes de l’interfaceList -ArrayList etLinkedList.

2. Créer unList

Tout d'abord, remplissons nosLists:

@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

Deuxièmement, supprimons le premier élément desArrayList, et assurez-vous que notre liste ne le contient plus:

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

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

Comme indiqué ci-dessus, nous utilisons la méthoderemove(index) pour supprimer le premier élément -this will also work for any implementation of the List interface.

4. LinkedList

LinkedList implémente également la méthoderemove(index) (à sa manière) mais il a aussi la méthoderemoveFirst().

Assurez-vous que cela fonctionne comme prévu:

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

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

5. La complexité du temps

Bien que les méthodes semblent similaires, leur efficacité diffère. La méthoderemove() deArrayList nécessite un temps O (n), alors que la méthoderemoveFirst() deLinkedList nécessite un temps O (1).

Cela est dû au fait queArrayList utilise une matrice sous le capot et que l'opérationremove() nécessite de copier le reste de la matrice au début. Plus le tableau est grand, plus le nombre d'éléments à déplacer est important.

Contrairement à cela,LinkedList utilise des pointeurs, ce qui signifie que chaque élément pointe vers le suivant et le précédent.

Par conséquent, supprimer le premier élément signifie simplement changer le pointeur sur le premier élément. Cette opération nécessite toujours le même temps, indépendamment de la taille d'une liste.

6. Conclusion

Dans cet article, nous avons expliqué comment supprimer le premier élément d'unList, et avons comparé l'efficacité de cette opération pourArrayList etLinkedList implementations.

Comme d'habitude, le code source complet est disponibleover on GitHub.