Sobes.tech
Junior — Middle

Gyűjtemények használata esetén, mely esetekben gyorsabb a bejárás: ArrayList vagy LinkedList?

sobes.tech MI

Válasz az MI-től

A Java-ban az ArrayList és a LinkedList kollekciók elemeinek bejárása a belső szerkezetük miatt különböző teljesítményt mutat.

  • ArrayList egy tömbön alapul, így az elemhez való hozzáférés index szerint O(1) idő alatt történik. Az index szerinti for ciklussal való bejárás nagyon gyors.
  • LinkedList egy kétszörösen összekapcsolt lista, ahol az elemhez való hozzáférés index szerint végig kell menni a listán a kezdet vagy a vég felől, ami O(n) időt vesz igénybe.

Ezért az összes elem iterálása iteratorral vagy foreach ciklussal nagyjából ugyanaz mindkét kollekciónál, de ha indexekkel (pl. get(i) ciklusban) történik az iterálás, akkor az ArrayList sokkal gyorsabb.

Példa:

ArrayList<String> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
// listák feltöltése

// Gyors bejárás ArrayList-ben
for (int i = 0; i < arrayList.size(); i++) {
    String item = arrayList.get(i); // O(1)
}

// Lassú bejárás LinkedList-ben indexekkel
for (int i = 0; i < linkedList.size(); i++) {
    String item = linkedList.get(i); // O(n)
}

// Ajánlott iterator vagy foreach használata LinkedList esetén
for (String item : linkedList) {
    // elem feldolgozása
}

Így az ArrayList-ben való bejárás gyorsabb, különösen, ha index szerinti hozzáférésre van szükség.