logo

Différence entre ArrayList et LinkedList

ArrayList et LinkedList implémentent tous deux l'interface List et maintiennent l'ordre d'insertion. Les deux sont des cours non synchronisés.

barre d'outils d'accès rapide MS Word

Cependant, il existe de nombreuses différences entre les classes ArrayList et LinkedList indiquées ci-dessous.

Liste des tableauxListe liée
1) ArrayList utilise en interne un tableau dynamique pour stocker les éléments.LinkedList utilise en interne un liste doublement chaînée pour stocker les éléments.
2) La manipulation avec ArrayList est lent car il utilise en interne un tableau. Si un élément est supprimé du tableau, tous les autres éléments sont déplacés en mémoire.La manipulation avec LinkedList est plus rapide que ArrayList car il utilise une liste doublement chaînée, donc aucun décalage de bits n'est requis en mémoire.
3) Une classe ArrayList peut faire office de liste uniquement parce qu'il implémente uniquement List.La classe LinkedList peut agir comme une liste et une file d'attente à la fois parce qu'il implémente les interfaces List et Deque.
4) ArrayList est mieux pour stocker et accéder données.LinkedList est mieux pour manipuler données.
5) L'emplacement mémoire des éléments d'un ArrayList est contigu.L'emplacement des éléments d'une liste chaînée n'est pas contagieux.
6) Généralement, lorsqu'un ArrayList est initialisé, une capacité par défaut de 10 est attribuée à l'ArrayList.Il n’existe aucun cas de capacité par défaut dans une LinkedList. Dans LinkedList, une liste vide est créée lorsqu'une LinkedList est initialisée.
7) Pour être précis, une ArrayList est un tableau redimensionnable.LinkedList implémente la liste doublement chaînée de l'interface de liste.

Exemple de ArrayList et LinkedList en Java

Voyons un exemple simple dans lequel nous utilisons à la fois ArrayList et LinkedList.

Nom de fichier: TestArrayLinked.java

 import java.util.*; class TestArrayLinked{ public static void main(String args[]){ List al=new ArrayList();//creating arraylist al.add('Ravi');//adding object in arraylist al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); List al2=new LinkedList();//creating linkedlist al2.add('James');//adding object in linkedlist al2.add('Serena'); al2.add('Swati'); al2.add('Junaid'); System.out.println('arraylist: '+al); System.out.println('linkedlist: '+al2); } } 
Testez-le maintenant

Sortir:

arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid] 

Points à retenir

Voici quelques points importants à retenir concernant une ArrayList et une LinkedList.

  • Lorsque le taux d’ajout ou de suppression est supérieur aux scénarios de lecture, optez pour la LinkedList. En revanche, lorsque la fréquence des scénarios de lecture est supérieure au taux d’ajout ou de suppression, alors ArrayList a priorité sur LinkedList.
  • Étant donné que les éléments d'un ArrayList sont stockés de manière plus compacte que ceux d'un LinkedList ; par conséquent, ArrayList est plus conviviale pour le cache que LinkedList. Ainsi, les risques de manque de cache sont moindres dans une ArrayList que dans une LinkedList. Généralement, on considère qu'une LinkedList est pauvre en localité de cache.
  • La surcharge de mémoire dans LinkedList est supérieure à celle d’ArrayList. En effet, dans une LinkedList, nous avons deux liens supplémentaires (suivant et précédent) car il est nécessaire de stocker l'adresse des nœuds précédent et suivant, et ces liens consomment de l'espace supplémentaire. De tels liens ne sont pas présents dans une ArrayList.