Méthode add() de Java LinkedList

Java LinkedList Java LinkedList


La classe LinkedList fournit plusieurs versions surchargées de la méthode add() pour ajouter des éléments à la liste.

1、boolean add(E e)

Il s'agit de la méthode add la plus basique, qui ajoute l'élément spécifié à la fin de la liste.

Exemple

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

Caractéristiques de la méthode:

  • Renvoie toujours true (car LinkedList autorise les éléments en double)
  • La complexité temporelle est O(1)
  • Équivalent à la méthode addLast()

2、void add(int index, E element)

Insère l'élément spécifié à la position spécifiée dans la liste.

Exemple

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Orange"); // Insérer à l'index 1

Caractéristiques de la méthode:

  • Si l'index est égal à la taille de la liste, cela équivaut à add(E e)
  • Nécessite un parcours jusqu'à la position spécifiée, avec une complexité temporelle moyenne de O(n)
  • Peut lever IndexOutOfBoundsException

3、boolean addAll(Collection<? extends E> c)

Ajoute tous les éléments de la collection spécifiée à la fin de la liste, dans l'ordre renvoyé par son itérateur.

Exemple

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Pomme");
fruits.add("Banane");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(moreFruits);

Caractéristiques de la méthode:

  • Renvoie true si la liste a été modifiée à la suite de l'appel
  • La complexité temporelle est O(m), où m est la taille de la collection passée en paramètre

4、boolean addAll(int index, Collection<? extends E> c)

Insère tous les éléments de la collection spécifiée dans cette liste, en commençant à la position spécifiée.

Exemple

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Pomme");
fruits.add("Banane");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(1, moreFruits); // Insérer la collection à l'index 1

Caractéristiques de la méthode:

  • Nécessite d'abord de parcourir jusqu'à la position spécifiée
  • La complexité temporelle est O(n + m), où n est la taille de la liste et m est la taille de la collection

Comparaison avec d'autres méthodes

add() vs addLast()

  • add(E e)etaddLast(E e)Complètement équivalents
  • Les deux servent à ajouter des éléments à la fin de la liste

add() vs offer()

  • add(E e)Peut lever une exception dans une file d'attente à capacité limitée
  • offer(E e)Renvoie false au lieu de lever une exception dans une file d'attente à capacité limitée

add() vs push()

  • push(E e)En faitaddFirst(E e)
  • Ajoute l'élément au début de la liste au lieu de la fin

Considérations de performance

Efficacité des opérations d'ajout

  • Ajout à la fin: complexité temporelle O(1)
  • Ajout au début: complexité temporelle O(1) (en utilisant addFirst())
  • Ajout au milieu: complexité temporelle O(n) (nécessite un parcours jusqu'à la position spécifiée)

Comparaison avec ArrayList

Opération LinkedList ArrayList
Ajout à la fin O(1) O(1) amorti
Ajout au début O(1) O(n)
Ajout au milieu O(n) O(n)
Accès aléatoire O(n) O(1)

Exemples d'applications pratiques

Création d'une liste de tâches

Exemple

LinkedList<String> todoList = new LinkedList<>();

// Ajouter une tâche
todoList.add("Faire les courses");
todoList.addFirst("Vérifier les e-mails"); // Tâche prioritaire
todoList.add(1, "Appeler maman"); // Priorité moyenne

System.out.println(todoList);
// Sortie : [Vérifier les e-mails, Appeler maman, Faire les courses]

Implémentation d'une file d'attente simple

Exemple

LinkedList<String> queue = new LinkedList<>();

// Opération d'enfilement
.add("Premier");
queue.add("Second");
queue.add("Third");

// Opération de retrait
while(!queue.isEmpty()) {
    System.out.println(queue.removeFirst());
}

Fusion de deux listes

Exemple

LinkedList<String> list1 = new LinkedList<>(Arrays.asList("A", "B", "C"));
LinkedList<String> list2 = new LinkedList<>(Arrays.asList("D", "E", "F"));

list1.addAll(list2);
System.out.println(list1); // Sortie: [A, B, C, D, E, F]

Notes

  1. Sécurité des threads: LinkedList n'est pas thread-safe et nécessite une synchronisation externe dans un environnement multithread
  2. Éléments null: L'ajout d'éléments null est autorisé
  3. Vérification des index: Faites attention aux conditions aux limites lors de l'utilisation de la méthode add avec un index
  4. Modification concurrente: Modifier la liste pendant l'utilisation d'un itérateur lèvera ConcurrentModificationException

Java LinkedList Java LinkedList

Autres extensions