Che cos'è un array?
Una ArrayList nella programmazione del computer è una struttura di dati che si comporta come un array di computer ma implementa anche la capacità di aumentare dinamicamente le dimensioni dell'array secondo necessità. A differenza di un tipo di dati a matrice intrinseca, che non può essere ridimensionato durante l'esecuzione del programma, la struttura ArrayList può aumentare e ridurre le dimensioni della matrice in risposta all'aggiunta o alla cancellazione di elementi. Ha un profilo prestazionale molto favorevole, che consente un rapido accesso casuale alla raccolta dei dati. Esistono due casi, tuttavia, in cui è più lento di alcune altre strutture di dati, vale a dire l'aggiunta e la rimozione di elementi dal centro dell'array. La maggior parte dei linguaggi di programmazione orientati agli oggetti ha un qualche tipo di implementazione di tale elenco, sebbene a volte vengano chiamati array dinamici.
L'utilizzo di una ArrayList fornisce a un programma la possibilità di accedere istantaneamente agli oggetti dati con un numero di indice invece di dover attraversare un'intera sequenza di dati per trovare un indirizzo, necessario con gli elenchi collegati. Con la possibilità di aumentare le dimensioni dell'array secondo necessità, è un approccio molto equilibrato che tiene conto sia della flessibilità che della velocità. Inoltre, quando gli elementi vengono rimossi da tale elenco, le dimensioni dell'array vengono ridotte, liberando spazio di memoria.
Un vantaggio dell'utilizzo di una ArrayList su alcune altre strutture di dati è che non è richiesto un oggetto wrapper per contenere i dati archiviati. Nel caso di un elenco collegato o di una tabella hash, di solito è necessario un oggetto separato per mantenere la tecnica utilizzata per conservare e manipolare la raccolta. Con un ArrayList, le uniche informazioni necessarie sugli oggetti dati sono l'indirizzo dell'oggetto in memoria. Ciò significa che ci sarà meno utilizzo della memoria ambientale quando si lavora con questo tipo di elenco.
Un potenziale problema con l'utilizzo di un ArrayList può provenire dal sistema di gestione della memoria e dell'implementazione. La maggior parte delle matrici sono allocate come posizioni di memoria consecutive. Quindi, per usare un ArrayList di una certa dimensione, almeno quella quantità di memoria deve essere disponibile in una sequenza ininterrotta di blocchi. L'array dinamico potrebbe ridimensionarsi più volte, quindi può verificarsi una frammentazione della memoria e causare un errore di allocazione della memoria, interrompendo l'esecuzione del programma.
Le prestazioni di un ArrayList sono simili a quelle dell'uso di un array standard, sebbene i tempi di accesso siano leggermente più lenti perché l'array è incapsulato in un oggetto. Un'istanza in cui un array dinamico può rallentare notevolmente, a seconda dell'implementazione, è quando è necessario modificare le dimensioni dell'array. Ciò può comportare la copia dell'array corrente in un nuovo array che è stato allocato alla nuova dimensione desiderata, causando un degrado temporaneo delle prestazioni. Lo stesso problema può verificarsi durante l'aggiunta o la rimozione di un elemento dal centro dell'elenco, causando lo spostamento di tutti gli elementi seguenti in una nuova posizione.