Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ του ArrayList και του Vector στη Java

Το ArrayList και το Vector είναι οι κλάσεις που βρίσκονται κάτω από την ιεραρχία πλαισίου συλλογής. ArrayList και Vector, και οι δύο χρησιμοποιούνται για να δημιουργήσουν μια δυναμική σειρά αντικειμένων όπου ο πίνακας μπορεί να αναπτυχθεί σε μέγεθος όπως και όταν απαιτείται. Υπάρχουν δύο βασικές διαφορές που διακρίνουν το ArrayList και το Vector είναι ότι ο Vector ανήκει στις κλάσεις Legacy οι οποίες αργότερα ανασχεδιάστηκαν για να υποστηρίξουν τις κλάσεις συλλογής, ενώ ένα ArrayList είναι μια τυπική κλάση συλλογής. Μια άλλη σημαντική διαφορά είναι ότι το ArrayList δεν συγχρονίζεται από την άλλη πλευρά. Το διάνυσμα συγχρονίζεται.

Ας μελετήσουμε κάποιες άλλες διαφορές με τη βοήθεια του πίνακα σύγκρισης που φαίνεται παρακάτω.

Συγκριτικό διάγραμμα

Βάση σύγκρισηςArrayListΔιάνυσμα
ΒασικόςΗ κλάση ArrayList δεν είναι συγχρονισμένη.Η τάξη διανυσμάτων συγχρονίζεται.
Κληρονομιά τάξηΤο ArrayList είναι μια τυπική κλάση Collection.Το Vector είναι μια κλάση παλαιού τύπου, ανασχεδιασμένη για να υποστηρίξει την κλάση συλλογής.
Δήλωση κλάσηςclass ArrayListclass Vector
ΑνακατανομήΌταν δεν έχει οριστεί ένα ArrayList αυξάνεται κατά το ήμισυ του μεγέθους του.Όταν δεν ορίζεται, ένας διάνυσμα αυξάνεται για να διπλασιάσει το μέγεθος του.
ΕκτέλεσηΔεδομένου ότι το ArrayList δεν είναι συγχρονισμένο, λειτουργεί πιο γρήγορα από το Vector.Καθώς το Vector συγχρονίζεται, λειτουργεί πιο αργά από το ArrayList.
Αρίθμηση / IteratorΤο ArrayList χρησιμοποιεί διεπαφή Iterator για να διασχίσει τα αντικείμενα που είναι αποθηκευμένα στο ArrayList.Το διανυσματικό χρησιμοποιεί την απαρίθμηση καθώς και τη διασύνδεση Iterator για να διασχίσει τα αντικείμενα που είναι αποθηκευμένα σε Vectors.

Ορισμός του ArrayList

Το ArrayList ανήκει στον κατάλογο των τυποποιημένων κατηγοριών συλλογής. Το class ArrayList ορίζεται μέσα στο πακέτο java.util, επεκτείνει την κλάση AbstractList, η οποία είναι επίσης μια τυποποιημένη κλάση συλλογής, και επίσης υλοποιεί το List, μια διεπαφή που ορίζεται στις διεπαφές συλλογής. Στην Java, μια τυποποιημένη διάταξη είναι πάντα σταθερού μήκους. Αυτό σημαίνει κάποτε δημιουργημένο. δεν αυξάνεται δυναμικά ή συρρικνώνεται σε μέγεθος. Έτσι, θα πρέπει να έχετε την προηγούμενη γνώση του μήκους του πίνακα που χρησιμοποιείτε. Αλλά, μερικές φορές μπορεί να συμβεί ότι το απαιτούμενο μήκος αποκαλύπτεται κατά το χρόνο εκτέλεσης έτσι, για να χειριστεί αυτό το είδος της κατάστασης java εισήγαγε το ArrayList.

Το ArrayList είναι κλάση που χρησιμοποιείται για τη δυναμική δημιουργία ενός πίνακα που περιέχει τις αναφορές στα αντικείμενα. Αυτός ο πίνακας θα μπορούσε να αυξηθεί σε μέγεθος όπως και όταν απαιτείται. Η δήλωση κλάσης έχει ως εξής:

 class ArrayList 

Εδώ, το Ε καθορίζει τον τύπο των αντικειμένων που θα διατηρεί ένας πίνακας. Ο πίνακας που δημιουργείται έχει μεταβλητό μήκος και αυξάνει και μειώνεται το μέγεθος όταν προστίθενται ή αφαιρούνται αντικείμενα από τη λίστα.

Το ArrayList δεν είναι συγχρονισμένο, αυτό σημαίνει ότι περισσότερα από ένα νήμα μπορούν να λειτουργήσουν ταυτόχρονα στον πίνακα. Για παράδειγμα, αν ένα νήμα προσθέτει μια αναφορά αντικειμένου στον πίνακα και ένα άλλο νήμα καταργεί ταυτόχρονα μια αναφορά αντικειμένου από τον ίδιο πίνακα. Η δημιουργία ενός δυναμικού πίνακα χρησιμοποιώντας την τάξη ArrayList:

 ArrayList S1 = νέο ArrayList (); System.out.println ("Αρχικό μέγεθος S1:" + S1.size ()); S1.add ("Τ"); S1.add ("C"); S1.add ("Η"); S1.add (1, "Ε"). System.out.println ("Μετά την προσθήκη S1 περιέχει:" + S1); System.out.println ("Μέγεθος S1 μετά την προσθήκη:" + S1.size ()); S1.αναίρεση ("Τ"); S1.αναίρεση (2); System.out.println ("Μετά τη διαγραφή S1 περιέχει:" + S1); System.out.println ("μέγεθος του S1 μετά τη διαγραφή:" + S1.size ()); // OutputInitial μέγεθος του S1: 0 Μετά την προσθήκη S1 περιέχει: [T, E, C, H]; Μέγεθος S1 μετά την προσθήκη: 4 Μετά τη διαγραφή S1 περιέχει: [E, H] Μέγεθος του S1 μετά τη διαγραφή: 2 

Στον παραπάνω κώδικα, μπορείτε να το δείτε. Δημιούργησα μια σειρά από αντικείμενα τύπου συμβολοσειράς. Πρόσθεσα κάποια αντικείμενα στον πίνακα S1 χρησιμοποιώντας τη μέθοδο add () και αργότερα διαγράψαμε μερικά αντικείμενα χρησιμοποιώντας τη μέθοδο remove (). Μπορείτε να παρατηρήσετε ότι αν δεν καθορίσετε το αρχικό μέγεθος του πίνακα θα είναι μήκους '0'. Όπως μπορείτε να δείτε ο πίνακας μεγαλώνει και συρρικνώνεται σε μέγεθος καθώς προσθέτετε και διαγράφετε τα στοιχεία.

Ορισμός του διάνυσμα

Το Vector είναι μια κλάση Legacy που επανασχεδιάζεται για να υποστηρίξει την κλάση συλλογής στην ιεραρχία συλλογικού πλαισίου. Η κατηγορία φορέα ορίζεται επίσης στο πακέτο java.util, που επεκτείνεται από την κλάση AbstractList και εφαρμόζεται από τη διεπαφή λίστας . Η κλάση Vector δηλώνεται ως εξής:

 class Vector 

Εδώ, το E ορίζει τον τύπο του αντικειμένου που θα αποθηκευτεί σε έναν πίνακα. Ένας πίνακας που δημιουργήθηκε χρησιμοποιώντας την κλάση Vector είναι μεταβλητού μήκους. Αυξάνει το διπλάσιο του μεγέθους εάν δεν έχει καθοριστεί η αύξηση. Ας καταλάβουμε τη δημιουργία πίνακα χρησιμοποιώντας το Vector.

 Vector V = νέος διάνυσμα (1, 1); V.addElement ("Tech"). V.addElement ("Διαφορές"). System.out.println ("Χωρητικότητα μετά από 2 προσθήκες:" + V.capacity ()); V.addElement ("Μεταξύ"); V.addElement ("Φορείς"). System.out.println ("τρέχουσα χωρητικότητα:" + V.capacity ()); // Χωρητικότητα εξόδου μετά από 2 προσθήκες: 2 Τρέχουσα χωρητικότητα: 4 

Στον παραπάνω κώδικα μπορείτε να δείτε ότι, αναφέρω ιδιαίτερα το μέγεθος και την τιμή αύξησης στον κατασκευαστή του Vector αντίστοιχα, ενώ δηλώνω τη συστοιχία αντικειμένων string. Ως εκ τούτου, μπορείτε να παρατηρήσετε ότι ως το όριο του πίνακα τελειώνει, αυξάνεται κατά την τιμή που παρέχεται στον κατασκευαστή κατά τη δήλωση.

Βασικές διαφορές μεταξύ του ArrayList και των διανυσμάτων

  1. Πολλαπλά θέματα θα μπορούσαν να λειτουργούν στο ArrayList την ίδια στιγμή, επομένως θεωρείται ασύγχρονη . Σε αντίθεση με το ArrayList, μόνο ένα νήμα μπορεί να λειτουργεί σε ένα διάνυσμα κάθε φορά. επομένως ονομάζεται συγχρονισμένο .
  2. Σε μια πρώιμη έκδοση της Java, μερικές τάξεις και διεπαφές θα παρείχαν τις μεθόδους αποθήκευσης αντικειμένων που ονομάζονταν κλάσεις Legacy. Το Vector είναι ένα από τα class Legacy της Java. Αργότερα, αυτές οι κληροδοτημένες τάξεις ανασχεδιάστηκαν για να υποστηρίξουν την κλάση Συλλογή, ενώ η κλάση ArrayList είναι μια τυπική κατηγορία Συλλογής.
  3. Όταν το όριο ενός πίνακα χρησιμοποιείται πλήρως και προστίθεται ένα νέο αντικείμενο δίπλα στον εξαντλημένο πίνακα, το μέγεθός του αυξάνεται τόσο στις περιπτώσεις ArrayList όσο και στο Vector αλλά η διαφορά είναι ότι στο ArrayList, εάν δεν έχει καθοριστεί το μέγεθος αυξάνεται κατά 50% της τρέχουσας συστοιχίας, ενώ στην διάταξη πίνακα διπλασιάζεται σε μέγεθος εάν δεν προσδιορίζεται η τιμή προσαύξησης.
  4. Το διάνυσμα χρησιμοποιεί την απαρίθμηση καθώς και το Iterator για να διασχίσει μια παράταξη, ενώ ένα ArrayList χρησιμοποιεί μόνο iterator για να διασχίσει έναν πίνακα.
  5. Δεδομένου ότι το ArrayList είναι ασύγχρονο και πολλά νήματα μπορούν να λειτουργήσουν ταυτόχρονα, η απόδοσή του είναι καλύτερη από την Vector στην οποία μπορεί να λειτουργεί μόνο ένα νήμα κάθε φορά.

Ομοιότητες:

  1. Το ArrayList και το Vector ορίζονται και στο πακέτο java.util.
  2. Το ArrayList και το Vector εκτείνονται και στην κατηγορία AbsractList.
  3. Το ArrayList και το Vector εφαρμόζουν αμφότερα τη διεπαφή List.
  4. Το ArrayList και οι Vectors χρησιμοποιούνται για τη δημιουργία ενός δυναμικού πίνακα που αναπτύσσεται όπως απαιτείται.
  5. Το ArrayList και το Vector διατηρούν αναφορές αντικειμένων.

Συμπέρασμα:

Τελειώνω λέγοντας ότι η χρήση του ArrayList είναι καλύτερη από τη χρήση του Vector καθώς εκτελείται γρηγορότερα και καλύτερα.

Top