Arraylist vs Vector
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. Il vettore può anche essere visto come una matrice che può crescere di dimensioni. I vettori possono essere facilmente allocati e possono essere utilizzati quando la dimensione richiesta della memoria non è nota fino al runtime.
Cos'è un Arraylist?
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. In Java, gli arraylists sono stati introdotti dalla versione 1.2 e fanno parte di Java Collections Framework.
Cos'è un vettore?
Il vettore è anche un array che può crescere di dimensioni. I vettori possono essere facilmente allocati e possono essere utilizzati quando la dimensione richiesta della memoria non è nota fino al runtime. I vettori possono anche contenere solo oggetti e non possono contenere tipi primitivi. I vettori sono sincronizzati, quindi possono essere usati tranquillamente in ambienti multithread. Ai vettori vengono forniti metodi per aggiungere oggetti, eliminare oggetti e oggetti di ricerca. Simile a un arraylist in java, i vettori possono essere attraversati usando foreach loop, iterator o semplicemente usando gli indici. Quando si tratta di Java, i vettori sono stati inclusi dalla prima versione di Java.
Qual è la differenza tra Arraylist e Vector?
Anche se sia gli arraylists che i vettori sono molto simili agli array dinamici che possono crescere di dimensioni, presentano alcune importanti differenze. La principale differenza tra arraylists e vettori è che i vettori sono sincronizzati mentre gli arraylists non sono sincronizzati. Pertanto, l'utilizzo di arraylists in ambienti multithread non sarà adatto, mentre i vettori possono essere utilizzati in modo sicuro in ambienti multithread (poiché sono thread-safe). Ma la sincronizzazione nei vettori causerebbe una riduzione delle prestazioni. Pertanto non sarebbe una buona idea usare i vettori in un singolo ambiente thread. Internamente, sia gli arraylists che i vettori usano matrici per contenere oggetti. Quando lo spazio corrente non è sufficiente, i vettori raddoppieranno le dimensioni del proprio array interno, mentre gli arraylists aumenteranno del 50% le dimensioni dell'array interno. Ma quando si usano sia gli arraylists che i vettori, dando una capacità iniziale adeguata, è possibile evitare il ridimensionamento non necessario dell'array interno. In una situazione in cui è nota la velocità di crescita dei dati, l'uso dei vettori sarebbe più adatto poiché si potrebbe definire il valore incrementale dei vettori.