Cerchiamo di studiare alcune altre differenze con l'aiuto del grafico di confronto mostrato di seguito.
Grafico comparativo
Base per il confronto | Lista di array | Vettore |
---|---|---|
Di base | La classe ArrayList non è sincronizzata. | La classe vettoriale è sincronizzata. |
Classe di eredità | ArrayList è una classe Collection standard. | Vector è una classe legacy, riprogettata per supportare la classe di raccolta. |
Dichiarazione di classe | class ArrayList | classe vettoriale |
Riallocazione | Quando non specificato, un ArrayList viene incrementato della metà delle sue dimensioni. | Quando non specificato, un vettore viene incrementato per raddoppiare le sue dimensioni. |
Prestazione | Poiché ArrayList non è sincronizzato, opera più velocemente di Vector. | Poiché Vector è sincronizzato, funziona più lentamente di ArrayList. |
Enumeration / Iterator | ArrayList utilizza l'interfaccia di Iterator per attraversare gli oggetti memorizzati in ArrayList. | Vector utilizza Enumeration e l'interfaccia Iterator per attraversare gli oggetti memorizzati in Vettori. |
Definizione di ArrayList
ArrayList appartiene all'elenco delle classi di raccolta standard. La classe ArrayList è definita all'interno del pacchetto java.util, estende la classe AbstractList che è anche una classe di raccolta standard e implementa anche List, un'interfaccia definita in Interfacce di raccolta. In Java, una matrice standard ha sempre una lunghezza fissa. Ciò significa una volta creato; non cresce o si riduce in modo dinamico in termini di dimensioni. Quindi, si dovrebbe avere la conoscenza preliminare della lunghezza della matrice che si sta utilizzando. Ma, a volte può succedere che la lunghezza richiesta venga rivelata al runtime, così, per gestire questo tipo di situazione, Java ha introdotto ArrayList.
L'ArrayList è classe utilizzata per la creazione dinamica di un array che contiene i riferimenti agli oggetti. Questo array potrebbe crescere di dimensioni come e quando richiesto. La dichiarazione di classe è la seguente:
class ArrayList
Qui, E specifica il tipo di oggetti che un array manterrà. La matrice creata è di lunghezza variabile e aumenta e diminuisce di dimensione quando gli oggetti vengono aggiunti o rimossi dall'elenco.
ArrayList non è sincronizzato, ciò vuol dire che più di un thread può operare sullo stesso array allo stesso tempo. Ad esempio, se un thread sta aggiungendo un riferimento all'array e un altro thread rimuove un riferimento all'oggetto dallo stesso array nello stesso momento. La creazione di un array dinamico usando la classe ArrayList:
ArrayList S1 = new ArrayList (); System.out.println ("Dimensione iniziale di S1:" + S1.size ()); S1.add ( "T"); S1.add ( "C"); S1.add ( "H"); S1.add (1, "E"); System.out.println ("Dopo l'aggiunta S1 contiene:" + S1); System.out.println ("Dimensione di S1 dopo l'aggiunta:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.println ("Dopo la cancellazione S1 contiene:" + S1); System.out.println ("Dimensione di S1 dopo la cancellazione:" + S1.size ()); // OutputInitial size of S1: 0 Dopo l'aggiunta S1 contiene: [T, E, C, H]; Dimensione di S1 dopo l'aggiunta: 4 Dopo la cancellazione S1 contiene: [E, H] Dimensione di S1 dopo la cancellazione: 2
Nel codice sopra, puoi vederlo; Ho creato una serie di oggetti di tipo stringa. Ho aggiunto alcuni oggetti all'array S1 usando il metodo add (), e successivamente ho cancellato alcuni oggetti usando il metodo remove (). È possibile osservare se non si specifica la dimensione iniziale dell'array sarà di lunghezza '0'. Come puoi vedere, la matrice cresce e si riduce di dimensioni man mano che aggiungi ed elimini gli elementi.
Definizione di vettore
Vector è una classe Legacy che viene riprogettata per supportare la classe di raccolta nella gerarchia di Collection Framework. La classe vettoriale è anche definita nel pacchetto java.util, estesa dalla classe AbstractList e implementata dall'interfaccia List . La classe Vector è dichiarata come segue:
classe vettoriale
Qui, la E definisce il tipo di oggetto che sarà memorizzato in una matrice. Una matrice creata usando la classe Vector ha una lunghezza variabile. Aumenta il doppio delle sue dimensioni se l'incremento non è specificato. Capiamo la creazione di array usando Vector.
Vector V = new Vector (1, 1); V.addElement ( "Tech"); V.addElement ( "Differenze"); System.out.println ("Capacità dopo 2 aggiunta:" + V.capacity ()); V.addElement ( "Tra"); V.addElement ( "vettori"); System.out.println ("Capacità attuale:" + V.capacity ()); // Capacità di uscita dopo 2 addizione: 2 Capacità di corrente: 4
Nel codice precedente potete vedere che, in particolare, ho menzionato la dimensione e il valore di incremento nel costruttore di Vector, mentre dichiarando la matrice di oggetti stringa. Quindi, è possibile osservare che al termine del limite dell'array, esso aumenta con il valore fornito al costruttore durante la dichiarazione.
Differenze chiave tra ArrayList e Vettori
- Più thread possono operare su ArrayList contemporaneamente, quindi è considerato non sincronizzato . A differenza di ArrayList, solo un singolo thread può operare su un vettore alla volta; quindi è chiamato sincronizzato .
- In una versione precedente di Java, alcune classi e interfacce fornivano i metodi per memorizzare oggetti che erano chiamati classi legacy. Il vettore è uno tra le classi legacy di Java. Successivamente, queste classi precedenti sono state riprogettate per supportare la classe Collection mentre, la classe ArrayList è una Class Collection standard.
- Quando il limite di un array è completamente utilizzato e un nuovo oggetto viene aggiunto accanto all'array esaurito, le sue dimensioni crescono in entrambi i casi, ad esempio in ArrayList e in Vector, ma la differenza è che in ArrayList, se non viene specificata la dimensione viene incrementato del 50% della matrice corrente mentre, nella matrice Vector viene raddoppiata se il valore di incremento non viene specificato.
- Vector utilizza Enumeration e Iterator per attraversare un array mentre, una ArrayList usa solo iteratore per attraversare un array.
- Poiché ArrayList non è sincronizzato e molti thread possono operare su di esso allo stesso tempo, le sue prestazioni sono migliori di Vector su cui può funzionare solo un thread alla volta.
Analogie:
- ArrayList e Vector sono entrambi definiti nel pacchetto java.util.
- ArrayList e Vector estendono entrambe la classe AbsractList.
- ArrayList e Vector implementano entrambi l'interfaccia List.
- ArrayList e Vectors sono entrambi utilizzati per creare un array dinamico che cresce come richiesto.
- ArrayList e Vector detengono entrambi riferimenti a oggetti.
Conclusione:
Concludo dicendo che l'utilizzo di ArrayList è migliore dell'uso di Vector in quanto è più veloce e migliore.