Sobes.tech
Junior

Kokia yra sudėtingumas pridėti elementą į ArrayList?

sobes.tech AI

Atsakymas iš AI

Vidutiniškai, elemento pridėjimo sudėtingumas į ArrayList yra O(1).

Tai pasiekiama naudojant dinaminius masyvus, ir pridėjimas vyksta į sąrašo pabaigą.

// Pridėjimas į sąrašo pabaigą
List<String> list = new ArrayList<>();
list.add("element"); // Vidutiniškai O(1)

Tačiau, jei ArrayList vidinis masyvas yra pilnas, reikalinga jo dydžio didinimo operacija (resize). Tai apima naujo, didesnio masyvo sukūrimą ir visų esamų elementų kopijavimą į naują masyvą. Šios operacijos sudėtingumas yra O(n), kur n yra sąrašo dabartinis dydis.

// Pavyzdys, kur gali įvykti resize
List<Integer> numbers = new ArrayList<>(3); // Pradinė talpa 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Čia gali įvykti resize - O(n)

Jei elementas yra pridėtas ne į sąrašo pabaigą (metodu add(int index, E element)), o į vidurį ar pradžią, reikalingas visų vėlesnių elementų perstumimas viena pozicija į dešinę. Šios operacijos sudėtingumas yra O(n), kur n yra perstumtų elementų skaičius.

// Pridėjimas į pradžią
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Pridėjimas į pradžią - O(n)

Taigi, ArrayList elemento pridėjimo sudėtingumas priklauso nuo pridėjimo vietos ir ar reikalingas resize:

Pridėjimo operacija Vidutinis atvejis Blogiausias atvejis (resize arba pridėjimas ne į pabaigą)
add(E element) (į pabaigą) O(1) O(n)
add(int index, E element) O(n) O(n)