Java LinkedList – LinkedList en Java

Java LinkedList est une implémentation des interfaces List et Deque. C’est l’une des classes d’implémentation de List les plus fréquemment utilisées. Elle étend AbstractSequentialList et implémente les interfaces List et Deque. C’est une collection ordonnée et prend en charge les éléments dupliqués. Elle stocke les éléments dans l’ordre d’insertion. Elle prend en charge l’ajout d’éléments nuls. Elle prend en charge les opérations basées sur les index. Si vous souhaitez en savoir plus sur les bases des listes, veuillez consulter cet article : Liste Java.

Table des matières succincte de l’article

Dans cet article, nous allons discuter des concepts suivants.

  • Liste Java
  • Diagramme de classe de la classe Java LinkedList
  • Méthodes de liste LinkedList Java
  • Méthodes de file d’attente LinkedList Java
  • Exemple de base de LinkedList Java
  • Génériques LinkedList Java
  • Tableau Java vers LinkedList
  • LinkedList Java vers tableau
  • Applications en temps réel de LinkedList Java
  • Représentation interne de LinkedList Java
  • Comment fonctionne l’insertion dans LinkedList Java ?
  • Comment fonctionne la suppression dans LinkedList Java ?
  • Opérations de file d’attente LinkedList Java
  • Java SE 8 : LinkedList Java vers flux
  • Java SE 9 LinkedList

Java LinkedList

Dans cette section, nous discuterons de certains points importants sur Java LinkedList:

  • La classe Java LinkedList est un membre du Framework Collections Java.
  • C’est une implémentation des interfaces List et Deque.
  • En interne, elle est implémentée en utilisant la structure de données Doubly Linked List.
  • Elle prend en charge les éléments en double.
  • Elle stocke ou maintient ses éléments dans l’ordre d’insertion.
  • Nous pouvons ajouter n’importe quel nombre d’éléments nuls.
  • Elle n’est pas synchronisée, ce qui signifie qu’elle n’est pas Thread safe.
  • Nous pouvons créer une LinkedList synchronisée en utilisant la méthode Collections.synchronizedList().
  • Dans les applications Java, nous pouvons l’utiliser comme une Liste, une pile ou une file d’attente.
  • Elle n’implémente pas l’interface RandomAccess. Nous pouvons donc accéder aux éléments uniquement dans l’ordre séquentiel. Elle ne prend pas en charge l’accès aléatoire aux éléments.
  • Lorsque nous essayons d’accéder à un élément d’une LinkedList, la recherche de cet élément commence depuis le début ou la fin de la LinkedList en fonction de l’endroit où cet élément est disponible.
  • Nous pouvons utiliser ListIterator pour itérer les éléments de LinkedList.
  • À partir de Java SE 8, nous pouvons convertir une LinkedList en un Stream et vice-versa.
  • Java SE 9 va ajouter quelques méthodes de fabrique pour créer une LinkedList immuable.

Diagramme de classe Java LinkedList

Comme nous le savons, Java LinkedList est l’une des classes d’implémentation de liste. Elle implémente également Deque. Comme le montre le diagramme de classe ci-dessous, elle n’étend pas directement la classe AbstractList. Elle étend la classe AbstractSequentialList.

Méthodes de liste Java LinkedList

Dans cette section, nous discuterons de certaines des méthodes Java LinkedList utiles et fréquemment utilisées. Les méthodes suivantes sont héritées de l’interface List ou Collection:

  1. int size(): pour obtenir le nombre d’éléments dans la liste.
  2. boolean isEmpty(): pour vérifier si la liste est vide ou non.
  3. boolean contains(Object o): Renvoie true si cette liste contient l’élément spécifié.
  4. Iterator iterator(): Renvoie un itérateur sur les éléments de cette liste dans une séquence appropriée.
  5. Object[] toArray(): Renvoie un tableau contenant tous les éléments de cette liste dans une séquence appropriée.
  6. boolean add(E e): Ajoute l’élément spécifié à la fin de cette liste.
  7. boolean remove(Object o): Supprime la première occurrence de l’élément spécifié de cette liste.
  8. boolean retainAll(Collection c): Ne conserve que les éléments de cette liste qui sont contenus dans la collection spécifiée.
  9. void clear(): Supprime tous les éléments de la liste.
  10. E get(int index): Returns the element at the specified position in the list.
  11. E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
  12. ListIterator listIterator(): Renvoie un itérateur de liste sur les éléments de la liste.
  13. List subList(int fromIndex, int toIndex): Renvoie une vue de la partie de cette liste entre fromIndex spécifié, inclusivement, et toIndex, exclusivement. La liste renvoyée est sauvegardée par cette liste, donc les modifications non structurelles dans la liste renvoyée sont reflétées dans cette liste, et vice versa.

Méthodes de LinkedList Deque en Java

Les méthodes suivantes sont spécifiques à la classe LinkedList et sont héritées de l’interface Deque:

  1. void addFirst(E e): Insère l’élément spécifié au début de cette liste.
  2. void addLast(E e): Insère l’élément spécifié à la fin de cette liste.
  3. E getFirst(): Retrieves, but does not remove, the first element of this list. This method differs from peekFirst only in that it throws an exception if this list is empty.
  4. E getLast(): Retrieves, but does not remove, the last element of this list. This method differs from peekLast only in that it throws an exception if this list is empty.
  5. E remvoeFirst(): Removes and returns the first element from this list.
  6. E removeLast(): Removes and returns the last element from this list.
  7. boolean offerFirst(E e): Insère l’élément spécifié au début de cette liste.
  8. boolean offerLast(E e): Insère l’élément spécifié à la fin de cette liste.
  9. E pollFirst(): Retrieves and removes the first element of this list, or returns null if this list is empty.
  10. E pollLast(): Retrieves and removes the last element of this list, or returns null if this list is empty.
  11. E peekFirst(): Retrieves, but does not remove, the first element of this list, or returns null if this list is empty.
  12. E peekLast(): Retrieves, but does not remove, the last element of this list, or returns null if this list is empty.

Exemple de base de LinkedList en Java

Dans cette section, nous discuterons de l’exemple de base de LinkedList en Java. Nous explorerons quelques opérations plus utiles dans les sections à venir. Exemple:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListDemo 
{
  public static void main(String[] args) 
  {
	List names = new LinkedList();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
        names.add(2011);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
  }
}

Sortie:-

LinkedList content: [Rams, Posa, Chinni, 2011]
LinkedList size: 4

Ici, nous avons créé un objet LinkedList et ajouté 4 éléments. Comme nous l’avons discuté, la méthode LinkedList.size() est utilisée pour obtenir le nombre d’éléments dans la liste. REMARQUE:- Sans utiliser de génériques, Java LinkedList prend en charge des éléments hétérogènes. Cependant, il n’est pas recommandé d’utiliser des collections sans génériques. Explorons les avantages et l’utilisation des génériques Java dans la section à venir avec un exemple simple.

Génériques Java LinkedList

Dans cette section, nous discuterons de l’utilisation des génériques avec Java LinkedList. Comme nous le savons, les génériques Java sont utiles pour écrire un programmation de Sécurité des types et effectuer des vérifications de type plus strictes lors de la compilation. Ils sont également utiles pour éliminer les surcoûts de conversion. Exemple:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListGenericsDemo
{
  public static void main(String[] args) 
  {
	List names = new LinkedList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
        // Nous ne pouvons pas ajouter autre chose que des chaînes
        // names.add(2011);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
  }
}

Sortie:-

LinkedList content: [Rams, Posa, Chinni]
LinkedList size: 3

Ici, nous avons créé un objet LinkedList avec des génériques et ajouté 3 éléments. Lorsque nous essayons d’ajouter un nombre à LinkedList, une erreur de compilation est déclenchée.

Tableau Java vers LinkedList

Dans cette section, nous explorerons comment convertir un tableau Java en objet LinkedList. Il existe plusieurs façons de le faire, mais je ne présente qu’une seule approche ici. Exemple :-


import java.util.LinkedList;
import java.util.List;

public class JavaArrayToLinkedListDemo 
{
	public static void main(String[] args) 
	{
		Integer[] numbers = {1,2,3,4,5};
		List<Integer> numbersList = new LinkedList<>();
		for(Integer s : numbers){
			numbersList.add(s);
		}
		System.out.println(numbersList);
	}
}

Sortie :-

[1, 2, 3, 4, 5]

Java LinkedList vers Array

Dans cette section, nous explorerons comment convertir un Java LinkedList en un tableau. Il existe plusieurs façons de le faire, mais je ne présente qu’une seule approche ici. Exemple :-

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class LinkedListToJavaArrayDemo 
{
	public static void main(String[] args) 
	{		
		List<Integer> numbersList = new LinkedList<>();
		numbersList.add(1);
		numbersList.add(2);
		numbersList.add(3);
		numbersList.add(4);
		numbersList.add(5);
		Integer[] numbers = new Integer[numbersList.size()];
		
		numbers = numbersList.toArray(numbers);
		System.out.println(Arrays.toString(numbers));

	}
}

Sortie :-

[1, 2, 3, 4, 5]

Java LinkedList Cas d’utilisation en temps réel

Dans cette section, nous discuterons de quels sont les meilleurs et les pires scénarios d’utilisation de LinkedList dans les applications Java. Meilleur scénario d’utilisation :-

  • Lorsque notre opération fréquemment utilisée consiste à ajouter ou supprimer des éléments au milieu de la liste, LinkedList est la meilleure classe à utiliser.

Pourquoi ? Parce que nous n’avons pas besoin de faire plus de décalages pour ajouter ou supprimer des éléments au milieu de la liste. Veuillez vous référer à la section « Comment fonctionne l’insertion dans Java LinkedList ? » pour le comprendre en détail. Pire scénario d’utilisation :-

  • Lorsque notre opération fréquemment utilisée consiste à récupérer des éléments d’une liste, alors LinkedList est le pire choix.

Pourquoi ? Parce que LinkedList ne prend en charge que l’accès séquentiel, et ne prend PAS en charge l’accès aléatoire. Veuillez vous référer à la section « Comment fonctionne la suppression dans LinkedList Java ? » pour le comprendre en détail. REMARQUE : LinkedList implémente les interfaces List, Deque, Cloneable et Serializable. Mais elle n’implémente pas l’interface RandomAccess.

Représentation interne de LinkedList en Java

Comme nous le savons, LinkedList en Java est implémentée en utilisant une liste doublement chaînée. Ainsi, LinkedList en Java représente ses éléments sous forme de nœuds. Chaque nœud est divisé en 3 parties comme indiqué ci-dessous. Ici, chaque nœud est utilisé à des fins spécifiques.

  1. La partie gauche du nœud est utilisée pour pointer vers le nœud précédent (ou élément) dans LinkedList.
  2. La partie droite du nœud est utilisée pour pointer vers le nœud suivant (ou élément) dans LinkedList.
  3. La partie centrale du nœud est utilisée pour stocker les données réelles.

REMARQUE:- Dans JVM, LinkedList NE stocke PAS ses éléments dans un ordre consécutif. Il stocke ses éléments à n’importe quel espace disponible et ils sont connectés les uns aux autres en utilisant les parties de nœud gauche et droite comme indiqué dans le diagramme ci-dessous.

Comment fonctionne l’insertion dans Java LinkedList?

Nous avons déjà vu comment LinkedList stocke ses éléments en tant que nœuds dans la section précédente. Dans cette section, nous discuterons de la façon dont fonctionne l’opération d’insertion de Java LinkedList en interne.

  1. Supposons que notre LinkedList initiale contienne les données suivantes.
    3. Effectuez l’opération d’insertion suivante sur cette LinkedList
linkedList.add(2,54);

Ici, nous essayons d’effectuer l’opération d’insertion pour ajouter un nouvel élément avec la valeur « 54 » à l’index 2.5. La LinkedList mise à jour ressemble à ce qui suit.

Comment fonctionne la suppression dans Java LinkedList?

Nous avons déjà vu comment LinkedList effectue l’opération d’insertion en interne dans la section précédente. Dans cette section, nous discuterons de la manière dont fonctionne l’opération de suppression de LinkedList en Java.

  1. Supposons que notre LinkedList initiale contient les données suivantes.
    3. Effectuez l’opération d’insertion suivante sur cette LinkedList
linkedList.remove(3);

Ici, nous essayons d’effectuer l’opération de suppression pour supprimer un élément disponible à l’index 3.5. La LinkedList mise à jour ressemble à ce qui suit.

Opérations de file d’attente Java LinkedList

Ici, nous explorerons comment un objet LinkedList fonctionne en tant que Deque. Nous utilisons ces opérations pour implémenter des files d’attente ou des piles. Nous discuterons en profondeur du fonctionnement d’une pile ou d’une file d’attente dans mes prochains messages. Exemple:-

import java.util.LinkedList;
import java.util.LinkedList;
import java.util.Deque;

public class LinkedListDequeOperationsDemo 
{
  public static void main(String[] args) 
  {
	Deque names = new LinkedList();
	names.add(2);
	names.addFirst(1);
	names.addLast(3);
	names.addFirst(0);
	names.addLast(4);
			
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());
	names.removeFirst();
	names.removeLast();
	
	System.out.println("LinkedList content: " + names);
	System.out.println("LinkedList size: " + names.size());	
  }
}

Résultat:-

LinkedList content: [0, 1, 2, 3, 4]
LinkedList size: 5
LinkedList content: [1, 2, 3]
LinkedList size: 3

Java SE 8 : Java LinkedList vers Stream

Ici, nous explorerons comment convertir un objet LinkedList en concept de flux Java SE 8. Exemple:-

import java.util.LinkedList;
import java.util.List;

public class LinkedListToStreamDemo 
{
  public static void main(String[] args) 
  {		
	List numbersList = new LinkedList<>();
	numbersList.add(1);
	numbersList.add(2);
	numbersList.add(3);
	numbersList.add(4);
	numbersList.add(5);
		
	//convertir List en flux
	numbersList.stream().forEach(System.out::println);
  }
}

Sortie:-

1
2
3
4
5

Java SE 9 LinkedList

En Java SE 9, Oracle Corp va ajouter quelques méthodes utilitaires utiles pour créer une liste immuable. Si vous souhaitez les apprendre en profondeur avec quelques exemples utiles, veuillez consulter mon article à l’adresse suivante : Méthodes de fabrique Java SE 9 pour liste immuable C’est tout pour un rapide tour d’horizon sur LinkedList en Java. J’espère que ces exemples de LinkedList en Java vous aideront à vous lancer dans la programmation avec LinkedList. Merci d’avoir lu mes tutoriels. Veuillez me laisser un commentaire si vous aimez mes tutoriels ou si vous avez des problèmes, des suggestions ou des erreurs de type.

Source:
https://www.digitalocean.com/community/tutorials/java-linkedlist-linkedlist-java