Skip to main content

Τι είναι μια λίστα ArrayList;

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

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

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

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

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