Πίνακες vs Arraylists
Οι πίνακες είναι η πιο συχνά χρησιμοποιούμενη δομή δεδομένων για την αποθήκευση μιας συλλογής στοιχείων. Οι περισσότερες γλώσσες προγραμματισμού παρέχουν μεθόδους για την εύκολη δήλωση πινάκων και πρόσβασης σε στοιχεία στους πίνακες. Μια λίστα συστοιχιών μπορεί να θεωρηθεί ως ένας δυναμικός πίνακας, ο οποίος μπορεί να μεγαλώσει σε μέγεθος. Για αυτόν τον λόγο, ο προγραμματιστής δεν χρειάζεται να γνωρίζει το μέγεθος της λίστας συστοιχιών όταν την ορίζει.
Τι είναι οι Πίνακες;
Το Εμφανίζεται στο σχήμα 1, είναι ένα κομμάτι κώδικα που χρησιμοποιείται συνήθως για τη δήλωση και την εκχώρηση τιμών σε έναν πίνακα. Το σχήμα 2 απεικονίζει πώς θα φαινόταν ένας πίνακας στη μνήμη.
τιμές int[5]; values[0]=100; values[1]=101; values[2]=102; values[3]=103; values[4]=104; |
Εικόνα 1: Κωδικός για τη δήλωση και την εκχώρηση τιμών σε έναν πίνακα
100 | 101 | 102 | 103 | 104 |
Δείκτης: 0 | 1 | 2 | 3 | 4 |
Εικόνα 2: Συστοιχία αποθηκευμένη στη μνήμη
Το Πάνω από τον κώδικα, ορίζει έναν πίνακα που μπορεί να αποθηκεύσει 5 ακέραιους αριθμούς και η πρόσβαση σε αυτούς γίνεται χρησιμοποιώντας δείκτες 0 έως 4. Μια σημαντική ιδιότητα ενός πίνακα είναι ότι, ολόκληρος ο πίνακας εκχωρείται ως ένα ενιαίο μπλοκ μνήμης και κάθε στοιχείο παίρνει το δικό του δικό σας χώρο στη συστοιχία. Μόλις οριστεί ένας πίνακας, το μέγεθός του είναι σταθερό. Επομένως, εάν δεν είστε σίγουροι για το μέγεθος του πίνακα κατά τη στιγμή της μεταγλώττισης, θα πρέπει να ορίσετε έναν αρκετά μεγάλο πίνακα ώστε να βρίσκεται στην ασφαλή πλευρά. Αλλά, τις περισσότερες φορές, θα χρησιμοποιήσουμε στην πραγματικότητα λιγότερο αριθμό στοιχείων από αυτόν που έχουμε διαθέσει. Έτσι, ένα σημαντικό μέρος της μνήμης σπαταλάται πραγματικά. Από την άλλη πλευρά, εάν ο "αρκετά μεγάλος πίνακας" δεν είναι στην πραγματικότητα αρκετά μεγάλος, το πρόγραμμα θα διακοπεί.
Τι είναι οι Arraylists;
Μια λίστα συστοιχιών μπορεί να θεωρηθεί ως ένας δυναμικός πίνακας, ο οποίος μπορεί να μεγαλώσει σε μέγεθος. Επομένως, οι κατάλογοι συστοιχιών είναι ιδανικοί για χρήση σε περιπτώσεις όπου δεν γνωρίζετε το μέγεθος των στοιχείων που απαιτούνται τη στιγμή της δήλωσης. Στην Java, οι κατάλογοι συστοιχιών μπορούν να κρατήσουν μόνο αντικείμενα, δεν μπορούν να κρατήσουν τους πρωτόγονους τύπους απευθείας (μπορείτε να βάλετε τους πρωτόγονους τύπους μέσα σε ένα αντικείμενο ή να χρησιμοποιήσετε τις κλάσεις περιτυλίγματος των πρωτόγονων τύπων). Γενικά, οι κατάλογοι συστοιχιών παρέχονται με μεθόδους για την πραγματοποίηση εισαγωγής, διαγραφής και αναζήτησης. Η χρονική πολυπλοκότητα της πρόσβασης σε ένα στοιχείο είναι o(1), ενώ η εισαγωγή και η διαγραφή έχουν χρονική πολυπλοκότητα o(n). Στην Java, οι κατάλογοι συστοιχιών μπορούν να διασχιστούν χρησιμοποιώντας βρόχους foreach, επαναλήπτες ή απλά χρησιμοποιώντας τα ευρετήρια.
Ποια είναι η διαφορά μεταξύ Arrays και Arraylists
Αν και οι πίνακες και οι κατάλογοι συστοιχιών είναι παρόμοιοι με την έννοια ότι και οι δύο χρησιμοποιούνται για την αποθήκευση συλλογών στοιχείων, διαφέρουν ως προς τον τρόπο ορισμού τους. Το μέγεθος του πίνακα πρέπει να δίνεται όταν ορίζεται ένας πίνακας, αλλά μπορείτε να ορίσετε μια λίστα πίνακα χωρίς να γνωρίζετε το πραγματικό μέγεθος. Μπορείτε να προσθέσετε στοιχεία σε μια λίστα συστοιχιών αφού οριστεί και αυτό δεν είναι δυνατό με πίνακες. Αλλά στην Java, οι κατάλογοι συστοιχιών δεν μπορούν να κρατήσουν πρωτόγονους τύπους, αλλά οι πίνακες μπορούν να χρησιμοποιηθούν για να κρατήσουν πρωτόγονους τύπους. Αλλά αν χρειάζεστε μια δομή δεδομένων που μπορεί να ποικίλει το μέγεθός της, η λίστα συστοιχιών θα ήταν η καλύτερη επιλογή.