La différence entre ArrayList et LinkedList en Java
Ce didacticiel présente comment initialiser char et la valeur initiale du type char en Java.
En Java, ArrayList et LinkedList sont les deux classes qui implémentent l’interface List. ArrayList est l’implémentation de tableau redimensionnable de l’interface List, tandis que LinkedList est l’implémentation de liste doublement liée de l’interface List en Java.
ArrayList et LinkedList sont tous deux utilisés pour stocker des données mais présentent plusieurs différences en raison du type d’implémentation. Dans cet article, nous allons boucler quelques différences majeures entre ceux-ci avec des exemples.
Opération | Liste des tableaux | Liste Liée |
---|---|---|
Ajout d’élément | Prenez plus de temps | Prenez moins de temps |
Accès à l’élément | Prenez moins de temps | Prenez plus de temps |
Suppression d’un élément | Prenez plus de temps | Prenez moins de temps |
Éléments d’itération | Prenez moins de temps | Prenez plus de temps |
Élément de recherche | Prenez moins de temps | Prenez plus de temps |
- Problèmes de performances avec LinkedList
Il utilise de nombreux petits objets mémoire qui sont mauvais pour la localisation du cache et créent des problèmes de performances tout au long du processus.
Bien que LinkedList soit rapide pour ajouter et supprimer des éléments, il est très lent si nous accédons à un élément spécifique. En revanche, ArrayList est rapide pour accéder à un élément spécifique mais lent si nous ajoutons et très lent si nous supprimons des éléments du milieu.
Exemple d’ArrayList en Java
Dans cet exemple, nous avons créé un ArrayList et appliqué plusieurs opérations telles que l’ajout, la suppression et l’accès à des éléments. Nous mesurons le temps pendant l’exécution des opérations afin de comprendre la différence de performances entre ArrayList et LinkedList. Voir l’exemple ci-dessous.
import java.util.ArrayList;
import java.util.List;
public class SimpleTesting {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
System.out.println("Adding Time : " + addElement(list, 10));
System.out.println("Adding Time : " + addElement(list, 2));
System.out.println(list);
System.out.println("Accessing Time : " + accessElement(list, 1));
System.out.println("Removing Time : " + removeElement(list, 1));
System.out.println(list);
}
static long addElement(List<Integer> list, int element) {
long starttime = System.nanoTime();
list.add(element);
long endtime = System.nanoTime();
return (endtime - starttime);
}
static long accessElement(List<Integer> list, int index) {
long starttime = System.nanoTime();
int el = list.get(index);
System.out.println("Element found : " + el);
long endtime = System.nanoTime();
return (endtime - starttime);
}
static long removeElement(List<Integer> list, int index) {
long starttime = System.nanoTime();
list.remove(index);
long endtime = System.nanoTime();
return (endtime - starttime);
}
}
Production :
Adding Time : 48556
Adding Time : 2090
[10, 2]
Element found : 2
Accessing Time : 42301
Removing Time : 6471
[10]
Exemple de LinkedList en Java
Dans cet exemple, nous avons créé une LinkedList et appliqué plusieurs opérations telles que l’ajout, la suppression et l’accès à des éléments. Nous mesurons également le temps lors de l’exécution des opérations afin de pouvoir comprendre la différence de performances entre ArrayList et LinkedList. Voir l’exemple ci-dessous.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class SimpleTesting {
public static void main(String[] args) {
List<Integer> list = new LinkedList<Integer>();
System.out.println("Adding Time : " + addElement(list, 10));
System.out.println("Adding Time : " + addElement(list, 2));
System.out.println(list);
System.out.println("Accessing Time : " + accessElement(list, 1));
System.out.println("Removing Time : " + removeElement(list, 1));
System.out.println(list);
}
static long addElement(List<Integer> list, int element) {
long starttime = System.nanoTime();
list.add(element);
long endtime = System.nanoTime();
return (endtime - starttime);
}
static long accessElement(List<Integer> list, int index) {
long starttime = System.nanoTime();
int el = list.get(index);
System.out.println("Element found : " + el);
long endtime = System.nanoTime();
return (endtime - starttime);
}
static long removeElement(List<Integer> list, int index) {
long starttime = System.nanoTime();
list.remove(index);
long endtime = System.nanoTime();
return (endtime - starttime);
}
}
Production :
Adding Time : 82591
Adding Time : 4218
[10, 2]
Element found : 2
Accessing Time : 54516
Removing Time : 7572
[10]