Sobes.tech
Junior

Jaká je složitost přidání prvku do ArrayList?

sobes.tech AI

Odpověď od AI

Složitost přidání prvku do ArrayList v průměrném případě je O(1).

Toho je dosaženo použitím dynamického pole a přidání probíhá na konec seznamu.

// Přidání na konec seznamu
List<String> list = new ArrayList<>();
list.add("prvek"); // O(1) v průměrném případě

Nicméně, pokud je vnitřní pole ArrayList plné, je nutná operace zvětšení velikosti (resize). To zahrnuje vytvoření nového, většího pole a zkopírování všech stávajících prvků do nového pole. Tato operace má složitost O(n), kde n je aktuální velikost seznamu.

// Příklad, kde může dojít k resize
List<Integer> numbers = new ArrayList<>(3); // Počáteční kapacita 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Zde může dojít k resize - O(n)

Pokud je prvek přidáván nikoli na konec seznamu (metoda add(int index, E element)), ale do středu nebo na začátek, je třeba posunout všechny následující prvky o jednu pozici doprava. Složitost této operace je O(n), kde n je počet prvků, které je třeba posunout.

// Přidání na začátek seznamu
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Přidání na začátek - O(n)

Tedy složitost přidání prvku do ArrayList závisí na místě přidání a na nutnosti resize:

Operace přidání Průměrný případ Nejhorší případ (při resize nebo nepřidání na konec)
add(E element) (na konec) O(1) O(n)
add(int index, E element) O(n) O(n)