Array vs Arraylists
Le matrici sono la struttura dati più comunemente utilizzata per memorizzare una raccolta di elementi. La maggior parte dei linguaggi di programmazione fornisce metodi per dichiarare facilmente matrici e accedere agli elementi negli array. Un arraylist può essere visto come un array dinamico, che può crescere di dimensioni. Per questo motivo, il programmatore non ha bisogno di conoscere la dimensione dell'arrayista quando lo sta definendo.
Cosa sono gli array?
Nella figura 1 è mostrato un pezzo di codice utilizzato in genere per dichiarare e assegnare valori a un array. La Figura 2 mostra come apparirà una matrice nella memoria.
valori int [5]; valori [0] = 100; valori [1] = 101; valori [2] = 102; valori [3] = 103; valori [4] = 104; |
Figura 1: codice per la dichiarazione e l'assegnazione di valori a un array
100 | 101 | 102 | 103 | 104 |
Indice: 0 | 1 | 2 | 3 | 4 |
Figura 2: array memorizzato nella memoria
Sopra il codice, definisce un array che può memorizzare 5 numeri interi e vi si accede usando gli indici da 0 a 4. Una proprietà importante di un array è che l'intero array viene allocato come un singolo blocco di memoria e ogni elemento riceve il proprio spazio nell'array . Una volta definito un array, la sua dimensione è fissa. Quindi, se non si è sicuri della dimensione dell'array in fase di compilazione, si dovrà definire una matrice abbastanza grande da essere nella parte sicura. Ma, il più delle volte, in realtà utilizzeremo un numero di elementi inferiore a quello che abbiamo assegnato. Quindi una notevole quantità di memoria è effettivamente sprecata. D'altra parte se la "matrice abbastanza grande" non è effettivamente abbastanza grande, il programma si bloccherebbe.
Cosa sono gli arraylisti?
Un arraylist può essere visto come un array dinamico, che può crescere di dimensioni. Pertanto gli arraylisti sono ideali per essere utilizzati in situazioni in cui non si conosce la dimensione degli elementi richiesti al momento della dichiarazione. In Java, gli arraylists possono solo contenere oggetti, non possono tenere direttamente i tipi primitivi (puoi mettere i tipi primitivi dentro un oggetto o usare le classi wrapper dei tipi primitivi). Generalmente gli arraylisti sono dotati di metodi per eseguire l'inserimento, la cancellazione e la ricerca. La complessità temporale dell'accesso a un elemento è o (1), mentre l'inserimento e l'eliminazione hanno una complessità temporale di o (n). In Java, gli arraylists possono essere attraversati usando foreach loop, iterator o semplicemente usando gli indici.
Qual è la differenza tra array e arraylists
Anche se gli array e gli arraylists sono simili nel senso che entrambi vengono utilizzati per memorizzare raccolte di elementi, differiscono nel modo in cui vengono definiti. La dimensione dell'array deve essere data quando viene definito un array, ma è possibile definire un arraylist senza conoscere la dimensione effettiva. È possibile aggiungere elementi a un arraylist dopo che è stato definito e questo non è possibile con gli array. Ma in Java, gli arraylists non possono contenere tipi primitivi, ma gli array possono essere usati per contenere tipi primitivi. Ma se hai bisogno di una struttura dati che può variare le sue dimensioni, l'arraylist sarebbe la scelta migliore.