Sobes.tech
Junior — Middle

Při používání kolekcí, v jakých případech je procházení rychlejší: v ArrayList nebo v LinkedList?

sobes.tech AI

Odpověď od AI

Procházení prvků v kolekcích ArrayList a LinkedList v jazyce Java se liší podle jejich vnitřní struktury.

  • ArrayList je založen na poli, takže přístup k prvku podle indexu je v čase O(1). Procházení pomocí cyklu for s indexy je velmi rychlé.
  • LinkedList je dvousměrně vázaný seznam, kde přístup k prvku podle indexu vyžaduje projít seznam od začátku nebo konce, což trvá čas O(n).

Proto je procházení všech prvků pomocí iterátoru nebo cyklu foreach přibližně stejné u obou kolekcí, ale pokud se prochází pomocí indexů (například get(i) v cyklu), bude ArrayList výrazně rychlejší.

Příklad:

ArrayList<String> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
// naplnění seznamů

// Rychlé procházení v ArrayList
for (int i = 0; i < arrayList.size(); i++) {
    String item = arrayList.get(i); // O(1)
}

// Pomalejší procházení v LinkedList s použitím indexů
for (int i = 0; i < linkedList.size(); i++) {
    String item = linkedList.get(i); // O(n)
}

// Doporučuje se používat iterator nebo foreach pro LinkedList
for (String item : linkedList) {
    // zpracování prvku
}

Tímto způsobem je procházení rychlejší v ArrayList, zvláště pokud je potřeba přístup podle indexu.