Sobes.tech
Junior — Middle

Pri používaní kolekcií, v ktorých prípadoch je prechádzanie rýchlejšie: v ArrayList alebo v LinkedList?

sobes.tech AI

Odpoveď od AI

Iterácia prvkov v kolekciách ArrayList a LinkedList v Jave sa líši podľa ich vnútornej štruktúry.

  • ArrayList je založený na poli, takže prístup k prvku podľa indexu je v čase O(1). Prechádzanie pomocou cyklu for s indexmi je veľmi rýchle.
  • LinkedList je dvojzávitovo prepojený zoznam, kde prístup k prvku podľa indexu si vyžaduje prejsť zoznam od začiatku alebo konca, čo trvá čas O(n).

Preto je prechádzanie všetkých prvkov pomocou iterátora alebo foreach približne rovnaké pre obe kolekcie, ale ak sa prechádza pomocou indexov (napríklad get(i) v cykle), potom bude ArrayList výrazne rýchlejší.

Príklad:

ArrayList<String> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
// naplnenie zoznamov

// Rýchle prechádzanie v ArrayList
for (int i = 0; i < arrayList.size(); i++) {
    String item = arrayList.get(i); // O(1)
}

// Pomalé prechádzanie v LinkedList s použitím indexov
for (int i = 0; i < linkedList.size(); i++) {
    String item = linkedList.get(i); // O(n)
}

// Odporúča sa použiť iterator alebo foreach pre LinkedList
for (String item : linkedList) {
    // spracovanie prvku
}

Takže prechádzanie je rýchlejšie v ArrayList, najmä ak je potrebný prístup podľa indexu.