H κλάση ArrayList Γιώργος Θάνος Γραφείο Γ ος όροφος Γκλαβάνη 37
Εισαγωγικά Η κλάση ArrayList δίνει την δυνατότητα να αποθηκεύσουμε δεδομένα οποιουδήποτε τύπου σε μία δομή δεδομένων η οποία επιτρέπει τα εξής: Την προσθήκη στοιχείων σε οποιαδήποτε θέση της δομής. Τα στοιχεία που έπονται του διαγραφέντος στοιχείου μετακινούνται μία θέση προς το τέλος. Τη διαγραφή στοιχείων από οποιαδήποτε θέση. Τα στοιχεία που έπονται του διαγραφέντος στοιχείου μετακινούνται μία θέση προς την αρχή. Τη διάτρεξη των στοιχείων που αποθηκεύσαμε με τη σειρά που αυτά αποθηκεύτηκαν. Μπορείτε να σκέφτεστε στην δομή ArrayList ως ένα ευέλικτο πίνακα θεωρητικά άπειρης χωρητικότητας που μπορεί να α)μεγαλώνει σε μέγεθος προσθέτοντας στοιχεία σε οποιαδήποτε θέση, β) να μειώνει το μέγεθος του διαγράφοντας στοιχεία από οποιαδήποτε θέση. Κατά τις προσθήκες δεν διαγράφεται υφιστάμενη πληροφορία και κατά τις διαγραφές δεν δημιουργούνται κενά στον πίνακα.
Constructors public ArrayList(): Αρχικοποίηση της δομής δεδομένων. public ArrayList(int initialcapacity): Αρχικοποίηση της δομής δεδομένων ορίζοντας ένα αρχικό μέγεθος για τα δεδομένα που θα αποθηκευτούν. Ο constructor της κλάσης ArrayList καλείται με μία επιπλέον παράμετρο που είναι ο τύπος των δεδομένων που θα αποθηκευτούν σε αυτή. Για παράδειγμα, εάν θέλετε να αποθηκεύσετε δεδομένα τύπου String θα γράψετε. ArrayList<String> = new ArrayList<String>(); ενώ αν θέλετε να αποθηκεύσετε δεδομένα τύπου Integer θα γράψετε ArrayList<Integer> = new ArrayList<Integer>();
Βασικές λειτουργίες - Προσθήκη αντικειμένου - Διαγραφή αντικειμένου - Έλεγχος ύπαρξης αντικειμένου - Βασίζεται σε σωστή υλοποίηση της equals - Διάτρεξη των περιεχομένων
public boolean add(e e): Προσθέτει ένα αντικείμενο της στο τέλος της δομής. public void add(int index, E element): Προσθέτει ένα αντικείμενο στη θέση index. Η μέθοδος είναι χρήσιμη εάν θέλετε να προσθέσετε στην αρχή. Σε αυτή την περίπτωση μπορείτε να θέσετε την τιμή index ίση με 0. public void clear(): Διαγράφει όλα τα δεδομένα από την δομή. public boolean contains(object o): Ελέγχει εάν η λίστα περιέχει το συγκεκριμένο στοιχείο. public E get(int index): Επιστρέφει το στοιχείο της λίστας που βρίσκεται στην θέση index. Η αρίθμηση των στοιχείων της λίστας ξεκινάει από 0 έως size-1, όπου size ο αριθμός των αποθηκευμένων στοιχείων. public int indexof(object o): Επιστρέφει τη θέση του συγκεκριμένου στοιχείου στη λίστα. Εάν δεν υπάρχει το στοιχείο στη λίστα επιστρέφει -1. public boolean isempty(): Επιστρέφει true εάν η λίστα είναι άδεια, διαφορετικά επιστρέφει false. public Iterator<E> iterator(): Επιστρέφει ένα αντικείμενο τύπου java.util.iterator προκειμένου να μπορούμε να διατρέξουμε τη λίστα. public E remove(int index): Διαγράφει το αντικείμενο που είναι αποθηκευμένο στη λίστα στη θέση index. public boolean remove(object o): Διαγράφει το αντικείμενο από την λίστα, εφόσον αυτό υπάρχει και επιστρέφει true. Εάν δεν υπάρχει επιστρέφει false. public int size(): Επιστρέφει τον αριθμό των αποθηκευμένων στοιχείων στη δομή. public E set(int index, E element) : Θέτει την τιμή του στοιχείου στη θέση index ίση με element.
Iterators - Οι iterators μας επιτρέπουν να διατρέξουμε μια δομή (όπως η ArrayList) χωρίς να γνωρίζουμε πώς ακριβώς είναι υλοποιημένη. - Αυτό είναι ιδιαίτερα χρήσιμο όταν σκοπεύουμε να διαγράψουμε στοιχεία κατά τη διάρκεια της διάτρεξης. - Η διαγραφή αλλάζει τη διάταξη και το πλήθος των στοιχείων. Για παράδειγμα, αν χρησιμοποιήσουμε ένα κλασικό for loop για να διατρέξουμε τα στοιχεία ενός ArrayList έως ότου βρούμε ένα συγκεκριμένο και το διαγράψουμε, τότε θα πρέπει να λάβουμε υπόψη ότι στην τρέχουσα θέση θα μετακινηθεί το επόμενο στοιχείο, κι ότι το συνολικό πλήθος είναι λιγότερο κατά ένα.
Iterators - Οι iterators παρέχουν τις παρακάτω μεθόδους: - hasnext() : επιστρέφει true αν υπάρχει επόμενο στοιχείο, διαφορετικά false. - next() : επιστρέφει το επόμενο στοιχείο. - remove() : διαγράφει το στοιχείο το οποίο επεστράφη από την αμέσως προηγούμενη χρήση της next().
Iterators - Η διαδικασία χρήσης iterators για τη διάτρεξη και (προαιρετικά) αφαίρεση στοιχείων είναι: - Κατασκευάζεται ένα αντικείμενο τύπου Iterator - Μέσω της μεθόδου hasnext() ελέγχουμε αν υπάρχει επόμενο στοιχείο στη δομή - Μέσω της μεθόδου next() αποκτάμε πρόσβαση στο επόμενο στοιχείο. - Αν επιθυμούμε να διαγράψουμε το στοιχείο, χρησιμοποιούμε τη μέθοδο remove(). ΠΡΟΣΟΧΗ: Αν διατρέχουμε μια δομή μέσω iterator, τότε οποιαδήποτε διαγραφή πρέπει να γίνεται μέσω της remove που παρέχει ο iterator και όχι μέσω της remove της δομής.