Array vs Arraylists
Gli array 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 array e accedere agli elementi negli array. Un elenco di array può essere visto come un array dinamico, che può aumentare di dimensioni. Per questo motivo, il programmatore non ha bisogno di conoscere la dimensione dell'arraylist quando la definisce.
Cosa sono gli array?
Mostrato nella figura 1, è un pezzo di codice tipicamente utilizzato per dichiarare e assegnare valori a un array. La figura 2 mostra come apparirà un array nella memoria.
int values[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
Al di sopra del codice, definisce un array che può memorizzare 5 numeri interi a cui si accede utilizzando 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 ottiene il suo proprio spazio nell'array. Una volta definita una matrice, la sua dimensione viene fissata. Quindi, se non sei sicuro della dimensione dell'array in fase di compilazione, dovresti definire un array sufficientemente grande per essere al sicuro. Ma, la maggior parte delle volte, utilizzeremo effettivamente un numero di elementi inferiore a quello che abbiamo allocato. Quindi una notevole quantità di memoria viene effettivamente sprecata. D' altra parte, se "array abbastanza grande" non è effettivamente abbastanza grande, il programma andrebbe in crash.
Cosa sono gli elenchi di array?
Un arraylist può essere visto come un array dinamico, che può crescere di dimensioni. Pertanto gli arraylist sono ideali per essere utilizzati in situazioni in cui non si conosce la dimensione degli elementi richiesti al momento della dichiarazione. In Java, gli arraylist possono contenere solo oggetti, non possono contenere direttamente tipi primitivi (puoi inserire i tipi primitivi all'interno di un oggetto o usare le classi wrapper dei tipi primitivi). Generalmente gli arraylist sono forniti 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 la cancellazione hanno una complessità temporale di o(n). In Java, le liste di array possono essere attraversate usando cicli foreach, iteratori o semplicemente usando gli indici.
Qual è la differenza tra gli array e gli elenchi di array
Anche se gli array e gli arraylist sono simili nel senso che entrambi sono usati per memorizzare raccolte di elementi, differiscono nel modo in cui sono definiti. La dimensione dell'array deve essere specificata 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 ciò non è possibile con gli array. Ma in Java, gli arraylist non possono contenere tipi primitivi, ma gli array possono essere usati per contenere tipi primitivi. Ma se hai bisogno di una struttura dati che possa variare le sue dimensioni, arraylist sarebbe la scelta migliore.