Sobes.tech
Junior — Middle

Lors de l'utilisation de collections, dans quels cas la traversée est-elle plus rapide : dans ArrayList ou dans LinkedList?

sobes.tech IA

Réponse de l'IA

L'itération des éléments dans les collections ArrayList et LinkedList en Java diffère en termes de performance en raison de leur structure interne.

  • ArrayList est basé sur un tableau, donc l'accès à un élément par index se fait en O(1). L'itération avec une boucle for avec indices est très rapide.
  • LinkedList est une liste doublement chaînée, où l'accès à un élément par index nécessite de parcourir la liste depuis le début ou la fin, ce qui prend O(n) en temps.

Par conséquent, parcourir tous les éléments avec un itérateur ou une boucle foreach est à peu près identique pour les deux collections, mais si l'itération se fait en utilisant des indices (par exemple, get(i) dans une boucle), alors ArrayList sera nettement plus rapide.

Exemple:

ArrayList<String> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
// remplissage des listes

// Parcours rapide dans ArrayList
for (int i = 0; i < arrayList.size(); i++) {
    String item = arrayList.get(i); // O(1)
}

// Parcours lent dans LinkedList en utilisant des indices
for (int i = 0; i < linkedList.size(); i++) {
    String item = linkedList.get(i); // O(n)
}

// Il est recommandé d'utiliser un itérateur ou foreach pour LinkedList
for (String item : linkedList) {
    // traitement de l'élément
}

Ainsi, la boucle est plus rapide avec ArrayList, surtout si un accès par index est nécessaire.