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

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 3 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 15 Ενδέχεται 2024
Anonim
Διαφορά μεταξύ του ArrayList και του LinkedList στην Java - Τεχνολογία
Διαφορά μεταξύ του ArrayList και του LinkedList στην Java - Τεχνολογία

Περιεχόμενο


Το ArrayList και το LinkedList είναι το Συλλογή τάξεις, και οι δύο εκτελούν το Λίστα διεπαφή. Η κλάση ArrayList δημιουργεί τη λίστα που αποθηκεύεται εσωτερικά σε a δυναμικός παράταξη που μεγαλώνει ή συρρικνώνεται σε μέγεθος καθώς τα στοιχεία προστίθενται ή διαγράφονται από αυτό. Το LinkedList δημιουργεί επίσης τη λίστα που αποθηκεύεται εσωτερικά σε a Διπλάσια Συνδεδεμένοι Λίστα. Και οι δύο κλάσεις χρησιμοποιούνται για την αποθήκευση των στοιχείων στη λίστα, αλλά η μεγάλη διαφορά μεταξύ των δύο κατηγοριών ArrayList και LinkedList είναι ότι ArrayList επιτρέπει την τυχαία πρόσβαση στα στοιχεία της λίστας καθώς λειτουργεί σε ένα βασισμένο σε ευρετήριο δομή δεδομένων. Από την άλλη πλευρά, το LinkedList δεν επιτρέπει τυχαία πρόσβαση, καθώς δεν έχει ευρετήρια για άμεση πρόσβαση στα στοιχεία, πρέπει να διασχίσει τη λίστα για να ανακτήσει ή να αποκτήσει πρόσβαση σε ένα στοιχείο από τη λίστα.


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

  1. Συγκριτικό διάγραμμα
  2. Ορισμός
  3. Βασικές διαφορές
  4. συμπέρασμα

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

Βάση σύγκρισηςArrayListLinkedList
Βασικός Το ArrayList επιτρέπει την τυχαία πρόσβαση στα στοιχεία της λίστας.Το LinkedList δεν επιτρέπει την τυχαία πρόσβαση στα στοιχεία της λίστας.
Δομή δεδομένωνΗ εσωτερική δομή που χρησιμοποιείται για την αποθήκευση στοιχείων είναι ο δυναμικός πίνακας.Η εσωτερική δομή που χρησιμοποιείται για την αποθήκευση στοιχείων είναι διπλή λίστα συνδέσμων.
ΕπεκτείνειΤο ArrayList επεκτείνει την κλάση AbstarctList.Το LinkedList επεκτείνει το AbstractSequentialList.
ΕφαρμόζειΤο AbstractList υλοποιεί τη διεπαφή λίστας.Το LinkedList υλοποιεί τη λίστα, Deque, ουρά.
Πρόσβαση Η πρόσβαση στα στοιχεία της λίστας είναι ταχύτερη στο ArrayList.Η πρόσβαση στα στοιχεία της λίστας είναι πιο αργή στο LinkedList.
ΧειρισμόςΗ χειραγώγηση στα στοιχεία της λίστας είναι πιο αργή στο ArrayList.Η χειραγώγηση στα στοιχεία της λίστας είναι ταχύτερη στο LinkedList.
Η ΣΥΜΠΕΡΙΦΟΡΑΤο ArraylList συμπεριφέρεται ως Λίστα κατά την εφαρμογή του.Το LinkedList συμπεριφέρεται ως Λίστα λίστας και ως ουρά, καθώς υλοποιεί και τη λίστα και την ουρά.


Ορισμός του ArrayList

ο AbstractList τάξη ορίζεται από το Πλαίσιο συλλογής. Επεκτείνεται AbstarctList και υλοποιεί Λίστα διεπαφή. ArrayList χρησιμοποιεί δυναμική συστοιχία δηλαδή τη συστοιχία μεταβλητού μήκους ως εσωτερική δομή δεδομένων για την αποθήκευση των στοιχείων στη λίστα. Η ανάγκη του ArrayList προκύπτει επειδή ο πίνακας στο java είναι σταθερού μήκους. Επομένως, δεν μπορεί να αυξηθεί ή να συρρικνωθεί σε μέγεθος καθώς τα στοιχεία προστίθενται ή διαγράφονται από τη συστοιχία. Έτσι, πρέπει να γνωρίζετε εκ των προτέρων το μέγεθος του απαιτούμενου πίνακα. Αλλά η λίστα συστοιχιών που υλοποιείται χρησιμοποιώντας την τάξη ArrayList μπορεί να αναπτυχθεί και να συρρικνωθεί σε μέγεθος καθώς τα στοιχεία προστίθενται ή διαγράφονται από τη συστοιχία.

Μπορείτε να έχετε πρόσβαση στη λίστα συστοιχιών που υλοποιείται χρησιμοποιώντας το ArrayList τυχαία καθώς το ArrayList λειτουργεί με βάση το δείκτη. Έτσι γνωρίζοντας ευρετήριο μπορείτε να έχετε άμεση πρόσβαση στην eleemnt της λίστας. Υπάρχουν τρεις κατασκευαστές του ArrayList:

ArrayList () ArrayList (Συλλογή <? Επεκτείνει E> c) ArrayList (int χωρητικότητα)

ο πρώτα ο κατασκευαστής εφαρμόζει μια λίστα κενού πλαισίου. ο δεύτερος ο κατασκευαστής υλοποιεί μια λίστα συστοιχιών που έχει αρχικοποιηθεί χρησιμοποιώντας το Συλλογή c στοιχεία. ο τρίτος ο κατασκευαστής υλοποιεί τη λίστα συστοιχιών με το χωρητικότητα που παρέχεται στο επιχείρημα. Σε συνεργασία με το ArrayList, μερικές φορές θα χρειαστεί να μετατρέψετε το Collection ArrayList σε πίνακα. Μπορεί να γίνει κάνοντας κλήση toArray ().

Ορισμός του LinkedList

Όπως το ArrayList, LinkedList είναι επίσης α Συλλογή ταξικές χρήσεις διπλά συνδεδεμένη λίστα ως εσωτερική δομή δεδομένων για την αποθήκευση των στοιχείων στη λίστα. Η τάξη του LinkedList επεκτείνεται AbstractSequentialList και εφαρμόζει το Λίστα, Deque και Ουρά διεπαφές. Η συνδεδεμένη λίστα που υλοποιείται χρησιμοποιώντας το LinkedList δεν είναι προσπελάσιμη τυχαία. Εάν θέλετε να ανακτήσετε οποιοδήποτε στοιχείο από τη λίστα, πρέπει να επαναλάβετε τη λίστα για να αναζητήσετε αυτό το στοιχείο.

Υπάρχουν δύο κατασκευαστές στην κλάση LinkedList.

LinkedList () LinkedList (Συλλογή <? Επεκτείνει E> c)

ο πρώτα ο κατασκευαστής δημιουργεί μια λίστα με κενές συνδέσεις. ο δεύτερος ο κατασκευαστής δημιουργεί μια συνδεδεμένη λίστα, αρχικοποιημένη με τα στοιχεία του Συλλογή ντο.

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

  1. Η εφαρμογή του καταλόγου από το ArrayList μπορεί να προσπελαστεί τυχαία επειδή το ArrayList υιοθετεί τη δομή δεδομένων που βασίζεται στον ευρετήριο του πίνακα. Από τα άλλα χέρια, η λίστα που εφαρμόζεται από το LinkedList δεν είναι προσπελάσιμη τυχαία επειδή για την ανάκτηση ή την πρόσβαση σε ένα συγκεκριμένο στοιχείο στη λίστα πρέπει να περάσετε τη λίστα.
  2. Η εσωτερική δομή δεδομένων που χρησιμοποιείται από το ArrayList για την αποθήκευση των στοιχείων της λίστας είναι a δυναμική συστοιχία που μπορεί να αυξηθεί ή να συρρικνωθεί καθώς τα στοιχεία προστίθενται ή διαγράφονται από τη λίστα. Ωστόσο, η εσωτερική δομή δεδομένων που χρησιμοποιείται από το LinkedList για την αποθήκευση των στοιχείων στη λίστα είναι διπλά συνδεδεμένη λίστα.
  3. Το ArrayList επεκτείνει το AbstractList class, η οποία είναι επίσης μια κλάση Συλλογή, ενώ επεκτείνεται η κλάση LinkedList AbstractSequentialList τάξη που είναι και πάλι μια κατηγορία Συλλογής.
  4. ArrayList εφαρμόζει τάξη Λίστα ενώ η κλάση του LinkedList υλοποιείται Λίστα, Ουρά, και Deque διεπαφές.
  5. Η πρόσβαση σε στοιχεία από τη λίστα που εφαρμόζεται μέσω του ArrayList είναι γρηγορότερα καθώς έχει μια δομή δεδομένων με βάση δείκτες. Από τα άλλα χέρια, δεν υπάρχει δομή που βασίζεται σε δείκτη στη λίστα υλοποίησης από τοLinkledList. Ως εκ τούτου, ένας ιχνηλάτης εφαρμόζεται μέσω της λίστας για να φτάσει στο στοιχείο στο οποίο πρέπει να προσπελαστεί, πράγμα που καθιστά δυνατή την πρόσβαση βραδύτερη στο LinkedList.
  6. Χειρισμός είναι Manipulationin στη λίστα που υλοποιείται χρησιμοποιώντας το ArrayList επειδή κάθε φορά που ένα στοιχείο προστίθεται ή διαγράφεται από τη λίστα, τα στοιχεία της λίστας μετατοπίζονται για να ικανοποιήσουν την αλλαγή. Από την άλλη πλευρά, ο χειρισμός είναι ταχύτερος στη λίστα που εφαρμόζει το LinkedList, καθώς δεν απαιτεί μετατόπιση στοιχείων στη λίστα κατά την προσθήκη ή τη διαγραφή των στοιχείων από τη λίστα.
  7. Το ArrayList λειτουργεί σαν ένα λίστα καθώς υλοποιεί τη διεπαφή λίστας, ενώ το LinkedList ενεργεί όπως λίστα και Ουρά καθώς υλοποιεί και τη λίστα και την ουρά.

Συμπέρασμα:

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