Sobes.tech
Junior

Aká je zložitosť pridania prvku do ArrayList?

sobes.tech AI

Odpoveď od AI

Zložitosť pridania prvku do ArrayList v priemere je O(1).

Toto sa dosahuje použitím dynamického poľa a pridanie sa vykonáva na konci zoznamu.

// Pridanie na koniec zoznamu
List<String> list = new ArrayList<>();
list.add("prvok"); // O(1) v priemere

Avšak, ak je vnútorné pole ArrayList plné, je potrebná operácia zväčšenia veľkosti (resize). To zahŕňa vytvorenie nového, väčšieho poľa a kopírovanie všetkých existujúcich prvkov do nového poľa. Táto operácia má zložitosť O(n), kde n je aktuálna veľkosť zoznamu.

// Príklad, kde môže dôjsť k resize
List<Integer> numbers = new ArrayList<>(3); // Počiatočná kapacita 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Tu môže dôjsť k resize - O(n)

Ak sa prvok pridáva nie na koniec zoznamu (metóda add(int index, E element)), ale do stredu alebo na začiatok, je potrebné posunúť všetky nasledujúce prvky o jednu pozíciu doprava. Zložitosť tejto operácie je O(n), kde n je počet prvkov, ktoré je potrebné posunúť.

// Pridanie na začiatok zoznamu
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Pridanie na začiatok - O(n)

Teda, zložitosť pridania prvku do ArrayList závisí od miesta pridania a od potreby resize:

Operácia pridania Priemerný prípad Najhorší prípad (pri resize alebo nepridaní na koniec)
add(E element) (na koniec) O(1) O(n)
add(int index, E element) O(n) O(n)