Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

Σχετικά έγγραφα
Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Generics και η κλάση ArrayList. Εισαγωγή στα Generics

Week. 6: Java Collections

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιεπαφές και Εσωτερικές κλάσεις Interfaces and Inner Classes. ιεπαφές - Interfaces

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συνδεδεµένες οµές εδοµένων. Εισαγωγή στις Συνδεδεµένες οµές εδοµένων

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

Week 7: Java Collection Classes

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

Standard Template Library (STL) C++ library

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

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

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

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

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Διάλεξη Εισαγωγή στη Java, Μέρος B

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

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

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

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

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language)

JDSL Java Data Structures Library

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

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

Μεθοδολογία Προγραμματισμού

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

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

scanf() scanf() stdin scanf() printf() int float double %lf float

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Γενικευμένες κλάσεις Συλλογές

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

Ειδικά Θέματα Προγραμματισμού

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Διαγράμματα Κλάσεων στη Σχεδίαση

Λογισµικό (Software SW) Γλώσσες

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

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

Κύρια σηµεία για µελέτη. έντρα. Ορολογία δέντρων. Τι είναι δέντρο

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

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

Οντοκεντρικός Προγραμματισμός

Ειδικά Θέματα Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

(Διαφάνειες Νίκου Βιδάκη)

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Οντοκεντρικός Προγραμματισμός

Διάλεξη 4. Νήματα (Threads) στην Java Συγχρονισμός Εξωτερικές διεργασίες Collections & Generics Διαχείριση σφαλμάτων στην Java

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

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

Wrapper Classes, Abstract Classes and Interfaces

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Διδάσκων: Παναγιώτης Ανδρέου

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

Προγραμματισμός Ι (HY120)

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

Java Μέρος Ι Αντικειμενοστρεφής Προγραμματισμός - 7

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Προγραμματισμός ΙI (Θ)

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

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

Οντοκεντρικός Προγραμματισμός

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

Εξαιρέσεις. try, catch, finally, throw, throws

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Βασικά της γλώσσας JAVA

Εύρεση & ιαχείριση Πληροφορίας στον Παγκόσµιο Ιστό

Περιεχόμενα. Περιεχόμενα

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Εύρεση & ιαχείριση Πληροφορίας στον Παγκόσµιο Ιστό. Ζητήµατα Μεγάλης-Κλίµακας Υλοποίησης του PageRank. Αρχιτεκτονική Μηχανής Αναζήτησης

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

6. Εξαιρέσεις στη γλώσσα Java

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο

4. Συνδεδεμένες Λίστες

Σύστηµα Java RMI. Κατανεµηµένα Συστήµατα 17-1

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

Transcript:

Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας ιάλεξη 14η: 31/08/2006 1 Συλλογές και Επαναλήπτες Collections and Iterators 2 Συλλογές - Collections Μια συλλογή (collection) της Java είναι οποιαδήποτε κλάση κρατά (αποθηκεύει) αντικείµενα καιυλοποιείτοcollection interface Για παράδειγµα, η κλάσηarraylist<t> είναι µια Java collection κλάση, καιυλοποιείόλεςτιςµεθόδους του Collection interface Οι collections χρησιµοποιούνται σε συνδυασµό µε τους iterators Το Collection interface είναι το υψηλότερο επίπεδο του πλαισίου της Java για τις collection κλάσεις Όλες οι collection κλάσεις που θα παρουσιάσουµε βρίσκονται στο java.util 3 1

Το Collection Landscape 4 Wildcards Οι κλάσεις και τα interfaces στο πλαίσιο του collection µπορούν να έχουν µια προσδιοριστές για παράµετρο τύπου που δεν καθορίζουν πλήρως τον τύπο δεδοµένων που θα ενσωµατωθεί αντί της παραµέτρου τύπου Επειδή καθορίζουν µια µεγάλη γκάµα πιθανώντύπων, είναι γνωστοί ως wildcards public void method(string arg1, ArrayList<?> arg2) Στο παραπάνω παράδειγµα, το πρώτο όρισµα είναι τύπου String, ενώ το δεύτερο όρισµα µπορεί να είναι ένα ArrayList<T> µε οποιοδήποτε βασικό τύπο 5 Wildcards Ένα όριο µπορεί να τοποθετηθεί σε έναν wildcard, καθορίζοντας ότι ο τύπος πρέπει να είναι πρόγονος ή απόγονος κάποιας κλάσης ή κάποιου interface Οσυµβολισµός <? extends String> καθορίζει ότι το όρισµα που θα ενσωµατωθεί θα είναι αντικείµενο οποιασδήποτε κλάσης είναι απόγονος της κλάσης String Οσυµβολισµός <? super String> καθορίζει ότι το όρισµα που θα ενσωµατωθεί θα είναι αντικείµενο οποιασδήποτε κλάσης είναι πρόγονος της κλάσης String 6 2

Το πλαίσιο (framework) Collection Το Collection<T> interface περιγράφει τις βασικές λειτουργίες που θα πρέπει να υλοποιούν όλες οι collection κλάσεις Οι κεφαλίδες των µεθόδων για τις λειτουργίες αυτές δείχνονται στις επόµενες διαφάνειες Αφού ένα interface είναι ένας τύπος, µπορεί να οριστεί οποιαδήποτε µέθοδος µε παράµετρο του τύπου Collection<T> Σε αυτή την παράµετρο µπορεί να ενσωµατωθεί ένα όρισµα που είναι αντικείµενο οποιασδήποτε κλάσης στο πλαίσιο collection 7 Κεφαλίδες µεθόδων στο Collection<T> Interface (1/10) 8 Κεφαλίδες µεθόδων στο Collection<T> Interface (2/10) 9 3

Κεφαλίδες µεθόδων στο Collection<T> Interface (3/10) 10 Κεφαλίδες µεθόδων στο Collection<T> Interface (4/10) 11 Κεφαλίδες µεθόδων στο Collection<T> Interface (5/10) 12 4

Κεφαλίδες µεθόδων στο Collection<T> Interface (6/10) 13 Κεφαλίδες µεθόδων στο Collection<T> Interface (7/10) 14 Κεφαλίδες µεθόδων στο Collection<T> Interface (8/10) 15 5

Κεφαλίδες µεθόδων στο Collection<T> Interface (9/10) 16 Κεφαλίδες µεθόδων στο Collection<T> Interface (10/10) 17 Collection Relationships Υπάρχει ένας αριθµός προκαθορισµένων κλάσεων που υλοποιούν το Collection<T> interface Οι κλάσεις που ορίζονται από τον προγραµµατιστή µπορούν επίσης να το υλοποιούν Μια µέθοδος που γράφεται για να διαχειρίζεται µια παράµετρο του τύπου Collection<T> θα λειτουργεί για όλες αυτές τις κλάσεις Υπάρχουν δυο κύρια interfaces που κάνουν extend το Collection<T> interface: Το Set<T> interface και το List<T> interface 18 6

Collection Relationships Οι κλάσεις που υλοποιούν το Set<T> interface δεν επιτρέπουν σε ένα στοιχείο της κλάσης να εµφανίζεται περισσότερες από µια φορά Το Set<T> interface έχει τις ίδιες κεφαλίδες µεθόδων όπως και το Collection<T> interface, αλλά σε µερικές περιπτώσεις η σηµασιολογία του (semantics) (αποσκοπούµενη σηµασία) είναι διαφορετική Οι µέθοδοι που είναι προαιρετικές στο Collection<T> interface είναι απαιτούµενες στο Set<T> interface 19 Collection Relationships Οι κλάσεις που υλοποιούν το List<T> interface έχουν τα στοιχεία τους διατεταγµένα, όπως σε µια λίστα Τα στοιχεία δεικτοδοτούνται αρχίζοντας από το Μηδέν Μια κλάση που υλοποιεί το List<T> interface επιτρέπει στα στοιχεία να εµφανίζονται περισσότερες από µια φορά Το List<T> interface έχει περισσότερες κεφαλίδες µεθόδων από ότι το Collection<T> interface Μερικές από τις µεθόδους που κληρονοµούνται από το Collection<T> interface έχουν διαφορετική σηµασιολογία για το List<T> interface ΗκλάσηArrayList<T> υλοποιεί το List<T> interface 20 Μέθοδοι στο Set<T> Interface (1/10) 21 7

Μέθοδοι στο Set<T> Interface (2/10) 22 Μέθοδοι στο Set<T> Interface (3/10) 23 Μέθοδοι στο Set<T> Interface (4/10) 24 8

Μέθοδοι στο Set<T> Interface (5/10) 25 Μέθοδοι στο Set<T> Interface (6/10) 26 Μέθοδοι στο Set<T> Interface (7/10) 27 9

Μέθοδοι στο Set<T> Interface (8/10) 28 Μέθοδοι στο Set<T> Interface (9/10) 29 Μέθοδοι στο Set<T> Interface (10/10) 30 10

Μέθοδοι στο List<T> Interface (1/16) 31 Μέθοδοι στο List<T> Interface (2/16) 32 Μέθοδοι στο List<T> Interface (3/16) 33 11

Μέθοδοι στο List<T> Interface (4/16) 34 Μέθοδοι στο List<T> Interface (5/16) 35 Μέθοδοι στο List<T> Interface (6/16) 36 12

Μέθοδοι στο List<T> Interface (7/16) 37 Μέθοδοι στο List<T> Interface (8/16) 38 Μέθοδοι στο List<T> Interface (9/16) 39 13

Μέθοδοι στο List<T> Interface (10/16) 40 Μέθοδοι στο List<T> Interface (11/16) 41 Μέθοδοι στο List<T> Interface (12/16) 42 14

Μέθοδοι στο List<T> Interface (13/16) 43 Μέθοδοι στο List<T> Interface (14/16) 44 Μέθοδοι στο List<T> Interface (15/16) 45 15

Μέθοδοι στο List<T> Interface (16/16) 46 Παγίδα: Προαιρετικές λειτουργίες Όταν ένα interface δίνει µια µέθοδο ως προαιρετική, αυτή η µέθοδος πρέπει να υλοποιηθεί από την κλάση που υλοποιεί το interface Το προαιρετικό σηµαίνει ότι επιτρέπεται να γράψουµε µια µέθοδο που δεν υλοποιεί εξ ολοκλήρου την αποσκοπούµενη σηµασιολογία Όµως, εάν δοθεί µια απλοϊκή υλοποίηση, τότε το σώµα της µεθόδου θα πρέπει να πετάξει µια UnsupportedOperationException 47 Υπόδειξη: ιαχείριση αυτών των Εξαιρέσεων Ητεκµηρίωση των µεθόδων διαφόρων collection interfaces και κλάσεων σηµατοδοτούν ότι πετάγονται κάποιες εξαιρέσεις Αυτές είναι unchecked exceptions, καιάραείναιχρήσιµες για αποσφαλµάτωση, αλλάδενχρειάζεταιναδηλωθούνήνα πιαστούν Στις υπάρχουσες collection κλάσεις, αντιµετωπίζονται ως run-time µηνύµατα λάθους Σε µια παραγόµενη κλάση κάποιας άλλης collection κλάσης, οι περισσότερες ή όλες από αυτές θα κληρονοµηθούν Σε µια collection κλάση που αναπτύσσεται από την αρχή, εάν πρόκειται να υλοποιεί κάποιο collection interface, τότε θα πρέπει να πετάει τις εξαιρέσεις που είναι καθορισµένες στο interface 48 16

Concrete Collections κλάσεις Η concrete κλάση HashSet<T> υλοποιεί το Set<T> interface, και µπορεί να χρησιµοποιηθεί εάν δεν απαιτούνται επιπλέον µέθοδοι ΗκλάσηHashSet<T> υλοποιεί όλες τις µεθόδους του Set<T> interface, και προσθέτει µόνο constructors ΗκλάσηHashSet<T> υλοποιείται µε χρήσηενόςπίνακα κατακερµατισµού (hash table) Οι κλάσεις ArrayList<T> και Vector<T> υλοποιούν το List<T> interface, και µπορούν να χρησιµοποιηθούν εάν δεν απαιτούνται επιπλέον µέθοδοι Τα interfaces ArrayList<T> και Vector<T> υλοποιούν όλες τις µεθόδους του interface List<T> Οποιαδήποτε από τις δυο κλάσεις µπορεί να χρησιµοποιηθεί όταν απαιτείται µια List<T> µε τυχαία προσπέλαση στα στοιχεία της 49 Concrete Collections κλάσεις Η concrete κλάση LinkedList<T> είναι µια concrete παραγόµενη κλάση της abstract κλάσης AbstractSequentialList<T> Όταν χρειαζόµαστε αποδοτική σειριακή µετακίνηση µέσα σε µια λίστα, θα πρέπει να χρησιµοποιείται η κλάση LinkedList<T> Το interface SortedSet<T> και η concrete κλάση TreeSet<T> σχεδιάστηκαν για υλοποιήσεις του Set<T> interface ώστε να παρέχουν γρήγορη ανάκτηση των στοιχείων Η υλοποίηση της κλάσης είναι παρόµοια µε ένα δυαδικό δένδρο (binary tree), αλλά µε τρόπους εισαγωγής στοιχείων ώστε να διατηρείται το δένδρο ισοζυγισµένο 50 Μέθοδοι στην κλάση HashSet<T> (1/2) 51 17

Μέθοδοι στην κλάση HashSet<T> (2/2) 52 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (1/15) 53 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (2/15) 54 18

Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (3/15) 55 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (4/15) 56 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (5/15) 57 19

Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (6/15) 58 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (7/15) 59 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (8/15) 60 20

Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (9/15) 61 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (10/15) 62 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (11/15) 63 21

Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (12/15) 64 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (13/15) 65 Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (14/15) 66 22

Μέθοδοι στις κλάσεις ArrayList<T> και Vector<T> (15/15) 67 ιαφορές ArrayList<T> και Vector<T> Για τους περισσότερους σκοπούς, οι ArrayList<T> και Vector<T> είναι ισοδύναµες Η κλάση Vector<T> είναι παλιότερη, και έπρεπε να προστεθούν νέες µέθοδοι για να χωρέσει στο πλαίσιο των collection ΗκλάσηArrayList<T> είναι νεότερη, και δηµιουργήθηκε ως τµήµα του πλαισίου collection ΗκλάσηArrayList<T> υποτίθεται ότι είναι πιο αποδοτική από ότι η κλάση Vector<T> 68 Παγίδα: Παραλείποντας το <T> Όταν το <T> ή το αντίστοιχο όνοµα κλάσης παραλείπεται από µια reference σε µια collection κλάση, αυτό είναι λάθος για το οποίο ο compiler µπορεί ή όχι να σηµατοδοτήσει µήνυµα λάθους(εξαρτάται από τις λεπτοµέρειες του κώδικα), και ακόµα και όταν το κάνει, το µήνυµα λάθους µπορεί να είναι παράξενο Ψάχνουµε για παραληφθέν <T> ή <ClassName> όταν ένα πρόγραµµα χρησιµοποιεί collection κλάσεις και δίνει παράξενα µηνύµατα λάθους ή δεν εκτελείται σωστά 69 23

Το Map Framework Το Java map framework σχετίζεται µε συλλογές διατεταγµένων ζευγών Για παράδειγµα, ένα key και µια σχετιζόµενη τιµή Τα αντικείµενα στο map framework µπορεί να υλοποιούν µαθηµατικές συναρτήσεις και σχέσεις, και έτσι µπορεί να χρησιµοποιηθούν για να κατασκευάσουµε κλάσεις κατάλληλες για βάσεις δεδοµένων Το map framework χρησιµοποιεί το Map<T> interface, την AbstractMap<T> κλάση, και τις κλάσεις που παράγονται από την κλάση AbstractMap<T> 70 Iterators Ο iterator είναι ένα αντικείµενο που χρησιµοποιείται σε µια collection για να παράσχει σειριακή πρόσβαση στα στοιχεία της collection Η προσπέλαση επιτρέπει εξέταση και πιθανή τροποποίηση των στοιχείων Ο iterator επιβάλλει διάταξη στα στοιχεία της collection ακόµα και όταν η collection δεν επιβάλλει κάποια διάταξη Εάν η collection επιβάλλει κάποια διάταξη, τότε ο iterator θα χρησιµοποιήσει την ίδια διάταξη 71 Το Iterator<T> interface Η Java παρέχει το Iterator<T> interface Οποιοδήποτε αντικείµενο µιας κλάσης που ικανοποιεί το Iterator<T> interface είναι ένας Iterator<T> Ένας Iterator<T> δεν υπάρχει από µόνος του Πρέπει να συσχετιστεί µε κάποιοαντικείµενο collection object µε χρήσητηςµεθόδου iterator Εάν c είναι ένα στιγµιότυπο (instance) µιας collection κλάσης (π.χ., HashSet<String>), η επόµενη δήλωση δίνει έναν iterator για το c: Iterator iteratorforc = c.iterator(); 72 24

Μέθοδοι στο Iterator<T> Interface (1/2) 73 Μέθοδοι στο Iterator<T> Interface (2/2) 74 Χρήση iterator µε αντικείµενο HashSet<T> Ένα αντικείµενο HashSet<T> δεν επιβάλλει διάταξη στα στοιχεία του Όµως, ο iterator θα βάλει κάποια διάταξη στα στοιχεία του hash set Η διάταξη αυτή προέρχεται από τη σειρά µε την οποία παράγονται από τη µέθοδο next() 75 25

Ένας Iterator (1/3) 76 Ένας Iterator (2/3) 77 Ένας Iterator (3/3) 78 26

Υπόδειξη: Βρόχοι For-Each ως iterators Παρόλο που δεν είναι iterator, ένας βρόχος foreach µπορεί να υπηρετήσει τον ίδιο σκοπό µε κάποιον iterator Χρησιµοποιούµε τοβρόχογιαναανακυκλωνόµαστε στα στοιχεία µιας collection Οι βρόχοι For-each µπορεί να χρησιµοποιηθούν µε οποιαδήποτε από τις collections που παρουσιάσαµε 79 Βρόχοι For-Each ως Iterators (1/2) 80 Βρόχοι For-Each ως Iterators (2/2) 81 27

Το ListIterator<T> interface To ListIterator<T> interface extends to Iterator<T> interface, και σχεδιάστηκε για να λειτουργεί µε collections που ικανοποιούν το List<T> interface Το ListIterator<T> έχει όλες τις µεθόδους που έχει και ένα Iterator<T>, αλλά και επιπλέον µεθόδους Το ListIterator<T> επιτρέπει µετακίνηση και προς τις δυο κατευθύνσεις µιας λίστας Το ListIterator<T> έχει µεθόδους, όπως οι set και add, που µπορούν να χρησιµοποιηθούν για τροποποίηση των στοιχείων 82 Μέθοδοι στο ListIterator<T> Interface (1/4) 83 Μέθοδοι στο ListIterator<T> Interface (2/4) 84 28

Μέθοδοι στο ListIterator<T> Interface (3/4) 85 Μέθοδοι στο ListIterator<T> Interface (4/4) 86 The ListIterator<T> Cursor Κάθε ListIterator<T> έχει έναν position marker γνωστό ως cursor Εάνηλίσταέχειn στοιχεία, αυτά αριθµούνται µε δείκτες από 0 µέχρι n-1, αλλά υπάρχουν n+1 cursor positions Όταν ενεργοποιείται η next(), επιστρέφεται το στοιχείο που είναι αµέσως µετά την cursor position και ο cursor µετακινείται µια θέση προς τα εµπρός Όταν ενεργοποιείται η previous(), επιστρέφεται το στοιχείο που είναι αµέσως πριν την cursor position και ο cursor µετακινείται µια θέση προς τα πίσω 87 29

Θέσεις του ListIterator<T> Cursor 88 Παγίδα: Οι next και previous µπορεί να επιστρέφουν reference Θεωρητικά, όταν µια λειτουργία ενός iterator επιστρέφει ένα στοιχείο µιας collection, µπορεί να επιστρέφει ένα copy ή clone του στοιχείου, ή µπορεί να επιστρέφει µια reference στο στοιχείο Οι iterators για τις standard προκαθορισµένες collection κλάσεις, όπως τις ArrayList<T> και HashSet<T>, επιστρέφουν references Εποµένως, τροποποιώντας την επιστρεφόµενη τιµή, τροποποιούµε τοστοιχείοτηςcollection 89 Iterator που επιστρέφει reference (1/4) 90 30

Iterator που επιστρέφει reference (2/4) 91 Iterator που επιστρέφει reference (3/4) 92 Iterator που επιστρέφει reference (4/4) 93 31