Differenza tra ArrayList e Vector

ArrayList vs Vector

Un vettore implementa matrici che possono crescere / restringersi in fase di esecuzione quando alcuni elementi vengono aggiunti o rimossi da esso. I suoi elementi sono accessibili usando un indice intero. Due campi - capacità e incremento della capacità, caratterizzano la gestione dello storage vettoriale. Implementa quattro interfacce:
* Elenco
* Accesso casuale
* Clonabile
* Interfacce serializzabili

ArrayList, proprio come i vettori, implementa anche quattro interfacce. Ancora una volta, come i vettori, le sue dimensioni possono cambiare durante il runtime. Inoltre, ha un campo chiamato capacity le cui dimensioni sono grandi quanto le dimensioni di ArrayList.

Sia i vettori che ArrayList sono utili per recuperare elementi da qualsiasi posizione e anche per inserire o eliminare elementi dalla fine della classe contenitore.
Dal punto di vista dell'API, sia i vettori che ArrayList sono molto simili. Quindi, dove si trova esattamente la differenza tra i due? I seguenti punti faranno luce su questo argomento:

1. Sincronizzazione: i vettori sono sincronizzati ma ArrayList no. Se si aggiungono o si eliminano elementi da un ArrayList, si parla di modifica strutturale. Quando più thread accedono a un ArrayList contemporaneamente a un blocco di codice che modifica l'elenco, è necessario sincronizzare esternamente l'elenco. In breve, i contenuti vettoriali sono thread-safe mentre quelli di ArrayList no. Se il requisito non menziona la raccolta thread-safe, allora si dovrebbe optare per ArrayList quando la sincronizzazione colpisce le prestazioni. Le liste di array non sincronizzate sono veloci.

2. Crescita dei dati: sia ArrayList che gli elementi vettoriali sono memorizzati come array, ma i vettori hanno una dimensione predefinita di 10 e ArrayList non ha dimensioni predefinite. Quando si aggiunge un elemento a un ArrayList oa un vettore, c'è la possibilità che una delle due classi possa esaurirsi. In tal caso, per impostazione predefinita, un vettore raddoppia le dimensioni mentre la dimensione ArrayList aumenta del 50%. È possibile impostare un valore di incremento nel caso di vettori che non è possibile per ArrayList.

3. Attraversare gli elementi: ArrayList ha un vantaggio qui dato che puoi accedere ai suoi elementi semplicemente usando un indice. Nel caso dei vettori, è necessario creare un iteratore per attraversare i suoi elementi.

Sommario:

1.Se la classe contenitore deve essere modificata da un singolo thread o da una variabile locale, è necessario utilizzare un ArrayList.
2.Quando la classe contenitore è accessibile da più thread, quindi utilizzare i vettori in caso contrario sarà necessario eseguire la sincronizzazione manuale.
3. Possiamo specificare la dimensione dell'incremento con il vettore e con ArrayList non possiamo.
4. Un vettore è sincronizzato e un ArrayList no.
5. Un vettore può incrementare la dimensione del doppio; ArrayList può incrementarlo del 50%.