Sobes.tech
Junior

Mekkora az összetettség egy elem hozzáadása az ArrayList-hez?

sobes.tech MI

Válasz az MI-től

Az ArrayList-hez elem hozzáadásának átlagos összetettsége O(1).

Ez a dinamikus tömb használatával érhető el, és a hozzáadás a lista végén történik.

// Hozzáadás a lista végéhez
List<String> list = new ArrayList<>();
list.add("elem"); // Átlagosan O(1)

Azonban, ha az ArrayList belső tömbje megtelt, akkor növelni kell a méretet (resize). Ez magában foglalja egy új, nagyobb tömb létrehozását és az összes meglévő elem átmásolását az új tömbbe. Ennek az műveletnek a komplexitása O(n), ahol n a lista aktuális mérete.

// Példa, ahol resize történhet
List<Integer> numbers = new ArrayList<>(3); // Kezdeti kapacitás 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Itt történhet resize - O(n)

Ha az elem nem a lista végére kerül (metódus add(int index, E element)), hanem középre vagy a lista elejére, akkor minden következő elemet egy pozícióval jobbra kell tolni. Ennek az összetettsége O(n), ahol n a tolni kívánt elemek száma.

// Hozzáadás a lista elejére
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Hozzáadás a lista elejére - O(n)

Így az ArrayList-hez való elem hozzáadás összetettsége attól függ, hogy hol történik a hozzáadás, és szükség van-e resize-re:

Hozzáadási művelet Átlagos eset Legrosszabb eset (resize vagy nem a végére történő hozzáadás)
add(E element) (a végére) O(1) O(n)
add(int index, E element) O(n) O(n)