Sobes.tech
Junior

Qual è la complessità di aggiungere un elemento a ArrayList?

sobes.tech AI

Risposta dell'AI

La complessità di aggiunta di un elemento a ArrayList nel caso medio è O(1).

Ciò si ottiene utilizzando un array dinamico, e l'aggiunta avviene alla fine della lista.

// Aggiunta alla fine della lista
List<String> list = new ArrayList<>();
list.add("elemento"); // O(1) nel caso medio

Tuttavia, se l'array interno di ArrayList è pieno, è necessaria un'operazione di resize. Questo comporta la creazione di un nuovo array più grande e la copia di tutti gli elementi esistenti nel nuovo array. La complessità di questa operazione è O(n), dove n è la dimensione attuale della lista.

// Esempio in cui può verificarsi resize
List<Integer> numbers = new ArrayList<>(3); // Capacità iniziale di 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Qui può verificarsi resize - O(n)

Se l'elemento viene aggiunto non alla fine della lista (metodo add(int index, E element)), ma nel mezzo o all'inizio, tutti gli elementi successivi devono essere spostati di una posizione verso destra. La complessità di questa operazione è O(n), dove n è il numero di elementi da spostare.

// Aggiunta all'inizio della lista
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Aggiunta all'inizio - O(n)

Pertanto, la complessità di aggiunta di un elemento a ArrayList dipende dal luogo di aggiunta e dalla necessità di resize:

Operazione di aggiunta Caso medio Caso peggiore (durante resize o non alla fine)
add(E element) (alla fine) O(1) O(n)
add(int index, E element) O(n) O(n)