Αλγοριθμική και Προγραμματισμός

Σχετικά έγγραφα
Collections Lists - ArrayLists. Παναγιώτης Σφέτσος, PhD

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Generics και ArrayLists

Α ν ύ σ μ α τ α - V e c t o r s

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Week 7: Java Collection Classes

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Συλλογές

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και αντικείμενα στην Java Strings Πίνακες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Πολλές φορές έχουμε πολλές μεταβλητές του ίδιου τύπου που συσχετίζονται και θέλουμε να τις βάλουμε μαζί.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

Wrapper Classes Τοποθέτηση Δεδομένων Κλήση Μεθόδων. Παναγιώτης Σφέτσος, PhD

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος.

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Week. 6: Java Collections

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Συλλογές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Κλάσεις και Αντικείµενα

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και αντικείμενα στην Java Strings Πίνακες

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα)

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Συλλογές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

2.1. Εντολές Σχόλια Τύποι Δεδομένων

4 Συλλογές Αντικειμένων

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Γενικοί Τύποι. 13 Ιανουαρίου 2011 Αντικειμενοστρεφής Προγραμματισμός στη Java 32

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Προγραμματισμός ΙΙ (Java) 3. Διαχείριση πολλαπλών αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Συλλογές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

Βασικές Έννοιες Δοµών Δεδοµένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Π ί ν α κ ε ς - A r r a y s

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αντικειµενοστρεφής Προγραµµατισµός

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

Βασικά Στοιχεία της Java

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Αντικειμενοστρεφής Προγραμματισμός

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Η κατασκευή αντικειμένων της κλάσης Student μπορεί να πραγματοποιηθεί είτε στη main είτε σε οποιαδήποτε μέθοδο κλάσης:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

Συλλογές, Στοίβες και Ουρές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Αλγοριθμική και Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Σι θα δούμε σε αυτό το μάθημα;

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Transcript:

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr Generics και ArrayLists Generics Μία από τις σημαντικότερες δυνατότητες των αντικειμενοστρεφών γλωσσών είναι η δυνατότητα ορισμού κλάσεων και μεθόδων που έχουν σαν παραμέτρους τύπους δεδομένων, δηλαδή να μπορούν να λειτουργούν με αντικείμενα διαφορετικών τύπων, παρέχοντας ταυτόχρονα ασφάλεια κατά την μεταγλώττιση (από την έκδοση 5.0 και μετά). Αυτή η δυνατότητα επιτρέπει την συλλογή αντικειμένων σε μία οντότητα Java Collection. Generic - κλάσεις Μια generic κλάση ή παραμετρική κλάση ορίζεται όπως και οι μη generic κλάσεις με την διαφορά ότι μετά το όνομα της πρέπει να ακολουθεί τουλάχιστον μια τυπική παράμετρος ανάμεσα στα σύμβολα <>. Μπορεί να υπάρχουν περισσότερες τυπικοί παράμετροι διαχωρισμένες με το σύμβολο (,). class name<t1, T2,..., Tn> { /*... */ Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 1

Παράδειγμα: Θα δούμε τη χρήση μιας Generic κλάσης με δύο αντικείμενα διαφορετικών τύπων. Η κλάση έχει δύο μεθόδους την add() που αρχικοποιεί - δίνει τιμή στο αντικείμενο και την μέθοδο get() που επιστρέφει το αντικείμενο στο κυρίως πρόγραμμα. Προσέξτε επιπλέον τις εντολές δημιουργίας των δύο αντικειμένων του παραδείγματος. class GenericTest1<T> { private T t; public void add(t t) {this.t = t; public T get() {return t; public static void main(string[] args) { GenericTest1<Integer> i1 = new GenericTest1<Integer>(); GenericTest1<String> s1 = new GenericTest1<String>(); i1.add(new Integer(25)); s1.add(new String("Hello Generic Class")); System.out.println("Arithmos = " + i1.get()); System.out.println("To string = " + s1.get()); Το αποτέλεσμα: Generic - μέθοδοι Γράφουμε μια generic μέθοδο που θα κληθεί με παραμέτρους διαφορετικών τύπων. Ανάλογα με τον τύπο της παραμέτρου ο μεταγλωττιστής χειρίζεται τις κλήσεις. Στην υπογραφή της μεθόδου θα υπάρχει, μέσα στα σύμβολα <>, ο τύπος του επιστρεφόμενου αποτελέσματος (στο παρακάτω παράδειγμα - <Α>, δικό μας όνομα). Η μέθοδος μπορεί να δεχτεί μία ή περισσότερες παραμέτρους (χωρισμένοι με το σύμβολο (,) κόμμα). Προσοχή οι τυπικές παράμετροι μπορεί να είναι μόνο αναφορές και όχι βασικοί τύποι. Στο παρακάτω παράδειγμα θα δούμε πώς μπορούμε να εμφανίσουμε τρείς - διαφορετικού τύπου - πίνακες με την ίδια μέθοδο: Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 2

class GenericMethod { public static < A > void printarray( A[] inputarray ) //ypografi tis methodou { for ( A element : inputarray ) { System.out.print(element + " "); System.out.println(); public static void main( String args[] ) { Character[] chararray = { 'J', 'A', 'V', 'A'; Double[] doublearray = { 2.1, 5.3, 1.2, 8.4 ; Integer[] intarray = { 4, 32, 45, 67, 89 ; System.out.println( "Pinakas haractirvn : " ); printarray( chararray ); System.out.println(); System.out.println( "Pinakas dekadikvn : " ); printarray( doublearray ); System.out.println(); System.out.println( "Pinakas akeraivn : " ); printarray( intarray ); Το αποτέλεσμα: Λίστες - Lists Λίστα : μια συλλογή (collection) από διατεταγμένα στοιχεία Κάθε στοιχείο ανιχνεύεται από ένα δείκτη (0 έως n-1) Η λίστα έχει δυναμικά αυξανόμενο μέγεθος (size) το πλήθος των στοιχείων της Τα στοιχεία μπορούν να εισαχθούν/διαγραφούν σε/από οποιαδήποτε θέση (αρχή, μέση, τέλος, κλπ.). Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 3

Μια σημαντική λίστα είναι η συλλογή ArrayList. ArrayList Μια σημαντική συλλογή (collection) αντικειμένων, που ακολουθεί την generics φιλοσοφία, είναι ο δυναμικός πίνακας ή δυναμική λίστα - ArrayList. Είναι ένας δυναμικός χώρος μνήμης που μπορεί να επεκταθεί κατά την εκτέλεση του προγράμματος, σε αντίθεση με τον πίνακα σταθερού μήκους (array προκαθορισμένων κελιών) που δεν μπορεί να επεκταθεί. H ArrayList μπορεί να οριστεί με αρχικό μέγεθος, που μπορεί να αυξάνει (προσθήκη στοιχείων) ή να μειώνεται ανάλογα (διαγραφή στοιχείων). Για να χρησιμοποιήσουμε την κλάση ArrayList θα πρέπει να εισάγουμε το πακέτο java.util (import java.util.*). Με τον ορισμό μιας λίστας πρέπει να καθορίζεται ο τύπος των στοιχείων της λίστας μέσα στις τριγωνικές αγκύλες <>: ArrayList<Type> name = new ArrayList<Type>(); π.χ ArrayList<String> list = new ArrayList<String>(20); Ο τύπος των στοιχείων πρέπει να είναι τύπος object και όχι βασικός δηλ., δεν μπορεί να υπάρξει ένας τέτοιος ορισμός: ArrayList<int> list = new ArrayList<int>(); // Λάθος ορισμός Όμως μπορούμε να έχουμε βασικούς τύπους χρησιμοποιώντας αντικείμενα των κλάσεων των βασικών τύπων (wrapper classes), δηλ.: ArrayList<Integer> list = new ArrayList<Integer>(); Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 4

Wrapper classes Τα αντικείμενα αυτών των κλάσεων κρατούν τιμές των βασικών τύπων. Βασικός Τύπος int double char boolean Wrapper Τύπος Integer Double Character Boolean Μετά τον ορισμό της λίστας με τύπο wrapper, μπορούμε να χειριστούμε τις βασικές τιμές σε μεθόδους και κώδικα: ArrayList<Double> vathmoi = new ArrayList<Double>(); vathmoi.add(3.2); vathmoi.add(2.7);... Μια μέθοδος μπορεί να δεχτεί σαν παράμετρο μια ArrayList ή να επιστρέψει μια λίστα (return): public static void name(arraylist<type> name) Παράδειγμα Μέθοδος που διαγράφει τους ζυγούς αριθμούς από την λίστα list. public static void DiagrafiZygonArithmon(ArrayList<Integer> list) { for (int i = list.size() - 1; i >= 0; i--) { int n = list.get(i); if (n % 2 == 0) { list.remove(i); Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 5

Τρείς διαφορετικοί δομητές: ArrayList() - μια κενή λίστα. ArrayList(Collection c) η λίστα αρχικοποιείται με τα αντικείμενα της συλλογής c. ArrayList(int capacity) η λίστα θα έχει αρχικό μέγεθος capacity. Σημαντικές Μέθοδοι της ArrayList boolean add(object o) void add(int index, Object ο) void clear() int indexof(object o) Object get(int index) Object remove(int index) Object set(int index, Object element) int size() String tostring() boolean addall(collection c) boolean addall(index, Collection c) boolean contains(object o) boolean containsall(collection c) boolean equals(collection c) Προσθέτει το αντικείμενο - ο στο τέλος της λίστας Εισάγει το αντικείμενο-ο στην θέση index Διαγράφει όλα τα στοιχεία της λίστας Επιστρέφει την θέση της πρώτης θέσης εύρεσης του στοιχείου (-1 αν δεν το βρει) Επιστρέφει το στοιχείο της συγκεκριμένης θέσης Διαγράφει το στοιχείο της συγκεκριμένης θέσης Αντικαθιστά το στοιχείο στην συγκεκριμένη θέση με το συγκεκριμένο στοιχείο Επιστρέφει το πλήθος των στοιχείων της λίστας Επιστρέφει ένα String που αντιπροσωπεύει την λίστα με την μορφή "[3, 42, -7, 15]" Προσθέτει όλα τα στοιχεία της συλλογής c στο τέλος της λίστας ή τα εισάγει στην συγκεκριμένη θέση Επιστρέφει true αν η λίστα περιέχει το στοιχείο Επιστρέφει true αν η λίστα περιέχει όλα τα στοιχεία της συλλογής c Επιστρέφει true αν η συλλογή c περιέχει τα στοιχεία της λίστας Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 6

int lastindexof(object o) Object remove(int index) protected void removerange(int fromindex, int toindex) Object[] toarray() Επιστρέφει την τελευταία θέση του στοιχείου στη λίστα (-1 αν δεν το βρει) Διαγράφει το στοιχείο στην συγκεκριμένη θέση από την λίστα Διαγράφει τα στοιχεία της λίστας που βρίσκονται στα όρια fromindex έως toindex Επιστρέφει τα στοιχεία της λίστας σαν πίνακα..περισσότερα στην τεκμηρίωση Προσοχή!! Μια generic-arraylist δέχεται αντικείμενα του τύπου που ορίζει, διαφορετικά λαμβάνουμε λάθος κατά την μεταγλώττιση. Π.χ.: ArrayList<String> s = new ArrayList<String>(); //generic ArrayList μόνο για Strings s.add( Skiathos ); //δεν υπάρχει λάθος γιατί το αντικείμενο είναι τύπουstring s.add(new Integer(9)); //λάθος στην μεταγλώττιση (compilation error) Χρήση μερικών σημαντικών μεθόδων Το μέγεθος της ArrayList Μέγεθος μιας ArrayList είναι ο συνολικός αριθμός των στοιχείων της. int size = s.size(); Εύρεση της θέσης ενός στοιχείου της ArrayList Με την χρήση της indexof(): int index = s.indexof("skiathos"); //εύρεση του στοιχείου Skiathos στη λίστα Χρήση της απλής for ή της foreach για την προσπέλαση μιας λίστας 1) for (int i = 0; i < stringlist.size(); i++) String stoiheio = s.get(i); System.out.println("Stoiheio " + i + " : " + stoiheio); Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 7

2) for(string stoiheio : s){ System.out.println("Stoiheio : " + stoiheio); Έλεγχος αν ένα ArrayList είναι άδειο Με δύο τρόπους: 1) με την μέθοδο isempty() boolean result = s.isempty(); //η isempty() επιστρέφει true αν η λίστα είναι άδεια 2) με την μέθοδο size(): if(s.size() == 0) {System.out.println("H lista einai adeia"); Διαγραφή στοιχείου από μια ArrayList Με δύο τρόπους: 1) διαγραφή στοιχείου σε συγκεκριμένη θέση (όταν την γνωρίζουμε): π.χ. s.remove(0); 2) διαγραφή συγκεκριμένου στοιχείου: π.χ. s.remove(stoiheio); Αντιγραφή όλων των στοιχείων μιας λίστας σε μια άλλη Με την μέθοδο addall(collection c), π.χ.: ArrayList<String> clone1 = new ArrayList<String>(); clone1.addall(s); Αντικατάσταση ενός στοιχείου σε συγκεκριμένη θέση Με την μέθοδο set(int i, O object ), π.χ.: s.set(7, "Santorini"); Διαγραφή όλων των στοιχείων της λίστας Με την μέθοδο clear(), π.χ.: s.clear(); Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 8

Δημιουργία μιας ArrayList από απλό Array Με την μέθοδο Arrays.asList(T... a), π.χ.: ArrayList s = Arrays.asList(new String[]{ Skiathos, Kriti, Halkidiki, Santorini ); //μετά την δημιουργία μπορούμε να αλλάξουμε και τα στοιχεία Μετατροπή μιας ArrayList σε απλό Array Με την μέθοδο toarray(t[] a), π.χ.: String[] listarray = new String[s.size()]; String[] aploarray = s.toarray(listarray); Διαφορές με τα απλά arrays 1) Στην κατασκευή: String[] names = new String[3]; ArrayList<String> list = new ArrayList<String>(); 2) Στην αποθήκευση τιμών: names[0] = "Sakis"; list.add("sakis"); 3) Στην Ανάκτηση τιμών: String s = names[0]; String s = list.get(0); ΠΑΡΑΔΕΙΓΜΑΤΑ Στην παρακάτω άσκηση δοκιμάζουμε τις μεθόδους size(), add() και remove(). Επειδή δεν χρησιμοποιούμε Τύπο (generics) μας βγάζει μήνυμα κατά την μεταγλώττιση (μη ασφαλής μεταγλώττιση). import java.util.*; class ArrayList1 { public static void main(string args[]) { Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 9

ArrayList al = new ArrayList(); System.out.println("Arhiko megethos: " + al.size()); // prosthiki stoiheivn al.add("j"); al.add("a"); al.add("v"); al.add("a"); al.add(0, "HELLO"); al.add(new Integer(2013)); System.out.println("Megethos meta tis prosthikes: " + al.size()); // emfanisi tou array list System.out.println("Ta periehomena: " + al); // diagrafi stoiheivn tou array list al.remove("v"); al.remove(2); System.out.println("Megethos meta tis diagrafes: " + al.size()); System.out.println("Ta periehomena: " + al); Το αποτέλεσμα: Μια πιο ασφαλής παραλλαγή (για ασφαλή μεταγλώττιση) είναι να χρησιμοποιήσουμε generics με την χρήση τύπου στην δημιουργία του ArrayList. Έτσι δεν θα λάβουμε προειδοποιητικό μήνυμα κατά την μεταγλώττιση. import java.util.*; class arraylist2 { public static void main(string args[]) { Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 10

ArrayList<String> arr = new ArrayList<String>(10); arr.add("i"); arr.add(" "); arr.add("l"); arr.add("o"); arr.add("v"); arr.add("e"); arr.add(" "); arr.add("j"); arr.add("a"); arr.add("v"); arr.add("a"); System.out.println(arr); Το αποτέλεσμα: Προσπέλαση στα στοιχεία της ArrayList με τον Iterator και την While Ένας άλλος τρόπος προσπέλασης των στοιχείων ενός ArrayList (εκτός από την εντολή - for) είναι με την χρήση της Iterator ή ListIterator σε συνδιασμό με την εντολή while. Έχουν δύο μεθόδους που χρησιμοποιούμε με την while για να προσπελάσουμε τα στοιχεία: την μέθοδο hasnext(), που επιστρέφει true όσο υπάρχει επόμενο στοιχείο στην λίστα και η μέθοδος next() που επιστρέφει το επόμενο στοιχείο. Παράδειγμα: Στο παρακάτω παράδειγμα θα χρησιμοποιήσουμε την εντολή for και την listiterator για να προσπελάσουμε τα στοιχεία μιας λίστας. import java.util.*; class IterarorArrayList { Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 11

public static void main(string args[]){ //mia lista me douleies pou prepei na kanv (todo list) ArrayList<String> looplist = new ArrayList<String>(); //Stoiheia tis listas looplist.add("1 - agora laptop"); looplist.add("2 - agora ektypoti "); looplist.add("3 - agora polymihaimatos"); //Xrisi tis entolis foreach System.out.println("========================="); System.out.println("Xrisi tis entolis foreach"); for(string element: looplist){ System.out.println(element); //Xrisi tis aplis for-entolis kai tismethodou size System.out.println("====================================="); System.out.println("Xrisi tis aplis for-entolis kai tismethodou size()"); for(int i=0; i<looplist.size(); i++){ System.out.println(loopList.get(i)); //Xrisi tis Iterator kai tis entolis while System.out.println("====================================="); System.out.println("Xrisi tis Iterate Arraylist kai tis entolis while"); Iterator<String> iterator = looplist.iterator(); while(iterator.hasnext()){ System.out.println(iterator.next()); //Xrisi tis ListIterator kai tis entolis while System.out.println("===================================="); System.out.println("Xrisi tis ListIterator kai tis entolis while"); ListIterator<String> listiterator = looplist.listiterator(); while(listiterator.hasnext()){ System.out.println(listIterator.next()); Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 12

Το αποτέλεσμα: Παναγιώτης Σφέτσος, Αλγοριθμική και Προγραμματισμός, 13