Méthode remove() de Java LinkedList

Java LinkedList Java LinkedList


remove()La méthode est une méthode JavaLinkedListméthode importante de la classe, utilisée pour supprimer des éléments de la liste chaînée. LinkedList fait partie du framework de collections Java et implémente les interfaces List et Deque.

remove()La méthode a plusieurs formes différentes, chacune ayant un objectif spécifique :

E remove()           // Supprime et renvoie le premier élément de la liste
E remove(int index)  // Supprime l'élément à la position spécifiée
boolean remove(Object o) // Supprime la première occurrence de l'élément spécifié

Détails de la méthode

remove() - Forme sans argument

Exemple

public E remove()

Fonction: Supprime et renvoie le premier élément de cette liste.

Paramètres: Aucun

Valeur de retour: L'élément supprimé

Exceptions: Lève une exception si la liste est videNoSuchElementException

Exemple:

Exemple

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

String first = list.remove(); // Supprime et renvoie "Apple"
System.out.println("Supprimé : " + first); // Sortie : Supprimé : Apple
System.out.println(list); // Sortie : [Banana, Cherry]

remove(int index) - Avec un paramètre index

Exemple

public E remove(int index)

Fonction: Supprime l'élément à la position spécifiée dans la liste.

Parameters:

  • index- L'index de l'élément à supprimer

Valeur de retour: L'élément supprimé

Exceptions:

  • IndexOutOfBoundsException- Si l'index est hors limites (index < 0 || index >= size())

Exemple:

Exemple

LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);

int removed = numbers.remove(1); // Supprime l'élément à l'index 1 (20)
System.out.println("Supprimé : " + removed); // Sortie : Supprimé : 20
System.out.println(numbers); // Sortie : [10, 30]

remove(Object o) - Avec un paramètre Object

Exemple

public boolean remove(Object o)

Fonction: Supprime la première occurrence de l'élément spécifié dans la liste, s'il existe.

Parameters:

  • o- L'élément à supprimer de la liste (s'il existe)

Valeur de retour:

  • true- Si la liste contient l'élément spécifié
  • false- Si la liste ne contient pas l'élément spécifié

Exemple:

Exemple

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

boolean result = fruits.remove("Apple"); // Supprime la première occurrence de "Apple"
System.out.println("Removed? " + result); // Sortie : Removed? true
System.out.println(fruits); // Sortie : [Banana, Apple]

Comparaison des méthodes

Forme de la méthode Type de paramètre Valeur de retour Exceptions Objectif
remove() Aucune E (Type d'élément) NoSuchElementException Supprime et renvoie le premier élément
remove(int index) int E (Type d'élément) IndexOutOfBoundsException Supprime l'élément à la position spécifiée
remove(Object o) Object booléen Aucune Supprime la première occurrence de l'élément spécifié

Notes d'utilisation

Considérations de performance

de LinkedListremove()méthode dans différents scénarios :

  1. Suppression de l'élément de tête (remove()ouremove(0)): complexité temporelle O(1)
  2. Suppression de l'élément de queue (remove(size()-1)): complexité temporelle O(1)
  3. Suppression d'un élément au milieu : complexité temporelle O(n), car il faut parcourir jusqu'à la position spécifiée

Modification concurrente

Lorsqu'on parcourt une LinkedList avec un itérateur, appelerremove()la méthode peut provoquerConcurrentModificationException. La bonne approche consiste à utiliser la propre méthode de l'itérateurremove()méthode.

Exemple incorrect:

Exemple

LinkedList<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3));
for (Integer num : list) {
    if (num == 2) {
        list.remove(num); // Peut lever ConcurrentModificationException
    }
}

Approche correcte:

Exemple

Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
    Integer num = it.next();
    if (num == 2) {
        it.remove(); // Utilisez la méthode remove() de l'itérateur
    }
}

Gestion des valeurs null

LinkedList permet de stocker des valeurs null. Vous pouvez utiliserremove(null)pour supprimer les éléments null de la liste.

Exemple

LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add(null);
list.add("B");

list.remove(null); // Supprime les éléments null
System.out.println(list); // Sortie : [A, B]

Exemples d'applications pratiques

Implémentation d'une file

de LinkedListremove()méthode peut être utilisée pour implémenter la caractéristique FIFO (First-In-First-Out) d'une file :

Exemple

LinkedList<String> queue = new LinkedList<>();
queue.add("Task1");
queue.add("Task2");
queue.add("Task3");

while (!queue.isEmpty()) {
    String task = queue.remove(); // Supprime et renvoie le premier élément
    System.out.println("Traitement : " + task);
}

Suppression des éléments correspondant à des conditions spécifiques

Exemple

LinkedList<Integer> numbers = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5, 6));

// Supprime tous les nombres pairs
numbers.removeIf(n -> n % 2 == 0);
System.out.println(numbers); // Sortie : [1, 3, 5]

Comparaison avec la méthode remove() d'ArrayList

Exemple

// La méthode remove() de LinkedList est plus performante aux positions intermédiaires
LinkedList<Integer> linkedList = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
linkedList.remove(2); // Relativement efficace

// remove() d'ArrayList nécessite de décaler les éléments aux positions intermédiaires
ArrayList<Integer> arrayList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
arrayList.remove(2); // Nécessite de décaler les éléments suivants

Résumé

de LinkedListremove()la méthode propose plusieurs formes pour répondre à différents besoins de suppression:

  1. remove()- Supprime rapidement l'élément de tête, convient aux opérations de file d'attente
  2. remove(int index)- Contrôle précisément la position de l'élément à supprimer
  3. remove(Object o)- Supprime en fonction de la valeur de l'élément

En pratique, vous devez choisir la forme de méthode appropriée en fonction des besoins spécifiques, et faire attention à leurs caractéristiques de performance et à leurs exceptions. Comprendre les différences et les scénarios d'application de ces méthodes vous aidera à utiliser LinkedList, une classe de collection importante, plus efficacement.

Java LinkedList Java LinkedList

Autres extensions