Differenza tra ArrayList e Vector in Java

Autore: Laura McKinney
Data Della Creazione: 1 Aprile 2021
Data Di Aggiornamento: 1 Maggio 2024
Anonim
14.4 Vector vs ArrayList in Java
Video: 14.4 Vector vs ArrayList in Java

Contenuto


ArrayList e Vector sono entrambi le classi nella gerarchia di Collection Framework. ArrayList e Vector, entrambi vengono utilizzati per creare una matrice dinamica di oggetti in cui la matrice può aumentare di dimensioni come e quando richiesto. Esistono due differenze fondamentali che distinguono ArrayList e Vector è che Vector appartiene alle classi Legacy che sono state successivamente riprogettate per supportare le classi di raccolta, mentre una ArrayList è una classe di raccolta standard. Un'altra differenza importante è che ArrayList non è sincronizzato d'altra parte; Il vettore è sincronizzato.

Studiamo alcune altre differenze con l'aiuto del grafico di confronto mostrato di seguito.

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Somiglianze
  5. Conclusione

Tabella di comparazione

Base per il confrontoLista di arrayVettore
Di baseLa classe ArrayList non è sincronizzata.La classe vettoriale è sincronizzata.
Classe legacyArrayList è una classe Collection standard.Vector è una classe legacy, riprogettata per supportare la classe di raccolta.
Dichiarazione di classeclass ArrayListclasse vettoriale
RiallocazioneSe non specificato, un ArrayList viene incrementato della metà della sua dimensione.Se non specificato, un vettore viene incrementato per raddoppiarne le dimensioni.
PrestazionePoiché ArrayList non è sincronizzato, funziona più velocemente di Vector.Poiché Vector è sincronizzato, funziona più lentamente di ArrayList.
Enumeration / IteratorArrayList utilizza l'interfaccia Iterator per attraversare gli oggetti memorizzati in ArrayList.Vector utilizza l'Enumerazione e l'interfaccia Iterator per attraversare gli oggetti memorizzati nei Vettori.


Definizione di ArrayList

ArrayList appartiene all'elenco delle classi di raccolta standard. La classe ArrayList è definita all'interno di java.util pacchetto, estende il AbstractList classe che è anche una classe di raccolta standard e implementa anche Elenco, un'interfaccia definita nelle interfacce di raccolta. In Java, un array standard ha sempre una lunghezza fissa. Ciò significa che una volta creato; non cresce o si restringe dinamicamente in termini di dimensioni. Quindi, dovresti avere la conoscenza preliminare della lunghezza dell'array che stai utilizzando. Ma a volte può capitare che la lunghezza richiesta venga rivelata in fase di esecuzione, quindi, per gestire questo tipo di situazione, Java ha introdotto ArrayList.

ArrayList è la classe utilizzata per la creazione dinamica di un array che contiene i riferimenti agli oggetti. Questa matrice potrebbe aumentare di dimensioni come e quando richiesto. La dichiarazione di classe è la seguente:


class ArrayList

Qui, E specifica il tipo di oggetti che un array terrà. L'array creato ha una lunghezza variabile e aumenta e diminuisce di dimensioni quando gli oggetti vengono aggiunti o rimossi dall'elenco.

ArrayList non è sincronizzato, ciò significa che più di un thread può operare sull'array contemporaneamente. Ad esempio, se un thread aggiunge un riferimento a un oggetto all'array e un altro thread rimuove contemporaneamente un riferimento a un oggetto dallo stesso array. La creazione di un array dinamico usando la classe ArrayList:

Lista di array S1 = nuova ArrayList(); System.out.ln ("Dimensione iniziale di S1:" + S1.size ()); S1.add ( "T"); S1.add ( "C"); S1.add ( "H"); S1.add (1, "E"); System.out.ln ("Dopo l'aggiunta S1 contiene:" + S1); System.out.ln ("Dimensione di S1 ​​dopo l'aggiunta:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.ln ("Dopo l'eliminazione S1 contiene:" + S1); System.out.ln ("Dimensione di S1 ​​dopo l'eliminazione:" + S1.size ()); // Output Dimensione iniziale di S1: 0 Dopo l'aggiunta S1 contiene:; Dimensione di S1 ​​dopo aggiunta: 4 Dopo la cancellazione S1 contiene: Dimensione di S1 ​​dopo la cancellazione: 2

Nel codice sopra, puoi vederlo; Ho creato una matrice di oggetti di tipo stringa. Ho aggiunto alcuni oggetti all'array S1 usando il metodo add (), e successivamente ho eliminato alcuni oggetti usando il metodo remove (). È possibile osservare se non si specifica la dimensione iniziale dell'array che sarà di lunghezza "0". Come puoi vedere l'array cresce e si riduce di dimensioni quando aggiungi ed elimini gli elementi.

Definizione di vettore

Vector è una classe Legacy riprogettata per supportare la classe collection nella gerarchia di Collection Framework. Anche la classe vettoriale è definita in java.util pacchetto, esteso di AbstractList classe e implementato dal Elenco interfaccia. La classe Vector è dichiarata come segue:

classe vettoriale

Qui, la E definisce il tipo di oggetto che verrà archiviato in un array. Un array creato utilizzando la classe Vector ha lunghezza variabile. Aumenta il doppio della sua dimensione se l'incremento non è specificato. Comprendiamo la creazione di array utilizzando Vector.

Vettore V = nuovo vettore(1,1); V.addElement ( "Tech"); V.addElement ( "Differenze"); System.out.ln ("Capacità dopo l'aggiunta 2:" + V.capacity ()); V.addElement ( "Tra"); V.addElement ( "vettori"); System.out.ln ("Capacità attuale:" + V.capacity ()); // Capacità di output dopo 2 aggiunte: 2 Capacità attuale: 4

Nel codice sopra puoi vedere che, in particolare, ho menzionato la dimensione e il valore di incremento nel costruttore di Vector rispettivamente, dichiarando l'array di oggetti stringa. Pertanto, è possibile osservare che al termine del limite dell'array, esso aumenta del valore fornito al costruttore durante la dichiarazione.

  1. Più thread potrebbero operare contemporaneamente su ArrayList, quindi viene considerato non sincronizzato. A differenza di ArrayList, solo un singolo thread può operare su un vettore alla volta; quindi si chiama sincronizzato.
  2. In una prima versione di Java, alcune classi e interfacce avrebbero fornito i metodi per archiviare oggetti che erano chiamati Classi legacy Vector è una delle classi Legacy di Java. Successivamente, queste classi legacy sono state riprogettate per supportare la classe Collection mentre la classe ArrayList è una classe Collection standard.
  3. Quando il limite di un array viene completamente utilizzato e un nuovo oggetto viene aggiunto accanto all'array esaurito, la sua dimensione aumenta in entrambi i casi, ad esempio in ArrayList e in Vector, ma la differenza è che in ArrayList, se non specificato la dimensione viene incrementato del 50% dell'array corrente mentre, nell'array Vector, la dimensione viene raddoppiata se non viene specificato il valore dell'incremento.
  4. Vector utilizza Enumeration e Iterator per attraversare un array, mentre ArrayList utilizza solo iteratore per attraversare un array.
  5. Poiché ArrayList è non sincronizzato e molti thread possono operare su di esso contemporaneamente, le sue prestazioni sono migliori di Vector su cui può funzionare solo un thread alla volta.

Somiglianze:

  1. ArrayList e Vector sono entrambi definiti nel pacchetto java.util.
  2. ArrayList e Vector estendono entrambi la classe AbsractList.
  3. ArrayList e Vector implementano entrambe l'interfaccia List.
  4. ArrayList e Vettori sono entrambi utilizzati per creare un array dinamico che cresce secondo necessità.
  5. ArrayList e Vector contengono riferimenti a oggetti.

Conclusione:

Concludo dicendo che l'uso di ArrayList è migliore dell'uso di Vector in quanto offre prestazioni migliori e più veloci.