Sobes.tech
Junior

Koja je složenost dodavanja elementa u ArrayList?

sobes.tech АИ

Одговор од АИ

Сложеност додавања елемента у ArrayList у просечном случају је O(1).

Ово се постиже коришћењем динамичког низа, а додавање се врши на крају листе.

// Додавање на крај листе
List<String> list = new ArrayList<>();
list.add("елемент"); // O(1) у просечном случају

Међутим, ако је унутрашњи низ ArrayList попуњен, потребна је операција повећања величине (resize). То укључује креирање новог, већег низа и копирање свих постојећих елемената у нови низ. Ова операција има сложеност O(n), где је n тренутна величина листе.

// Пример где може доћи до resize
List<Integer> numbers = new ArrayList<>(3); // Почетна капацитет 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Овде може доћи до resize - O(n)

Ако се елемент додаје не на крај листе (метод add(int index, E element)), већ у средину или на почетак, потребно је померити све следеће елементе за једну позицију десно. Сложеност ове операције је O(n), где n представља број елемената који треба померити.

// Додавање на почетак листе
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Додавање на почетак - O(n)

Дакле, сложеност додавања елемента у ArrayList зависи од места додавања и потребе за resize-ом:

Операција додавања Просечан случај Најгоре (при resize-у или ако се не додаје на крај)
add(E element) (на крај) O(1) O(n)
add(int index, E element) O(n) O(n)