Προγραμματισμός με τη γλώσσα Java

transportdingdongΛογισμικό & κατασκευή λογ/κού

14 Ιουλ 2012 (πριν από 5 χρόνια και 4 μήνες)

231 εμφανίσεις

Προγραμματισμόςμετη
γλώσσαJava
(16η
διάλεξη)
ΗρακλήςΒαρλάμης
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava2
Περιεχόμενα

Πλαίσιοσυλλογών

Διεπαφές, τάξεις, αλγόριθμοι

Οιβασικοίτύποισυλλογών

Οιδιεπαφέςπουορίζονται

Αφηρημένεςτάξεις

Υλοποιήσεις

Κριτήριαεπιλογής
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava3
Πλαίσιογενικότερα 
Ωςπλαίσιοορίζεταιτοσύνολοτωντάξεωνπου
καθορίζειτοσχεδιασμόλύσηςγιαμιαοικογένεια
προβλημάτων

Περιλαμβάνεικάποιεςβασικέςτάξειςαλλάμπορείνα
επεκταθεί

Καθορίζειτηναρχιτεκτονικήμιαςεφαρμογής: τις
τάξεις, τααντικείμενα, τιςμεταξύτουςσυνεργασίες
καιτονέλεγχοτωννηματικώνδιεργασιών

Ταυτόχροναπροσφέρεικαιέτοιμεςυλοποιήσειςπου
μπορούμεναχρησιμοποιήσουμε
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava4
Πλαίσιοδιαχείρισηςσυλλογών 
Τοπρόβλημαείναιηδιαχείρισησυλλογών
αντικειμένων

Τοπλαίσιοκαθορίζειτιςτάξειςγιατους
διάφορουςτύπουςσυλλογώνκαιτιςμεθόδους
πουαπαιτείηδιαχείρισημιαςσυλλογής

Γενικότεραμια
συλλογή
(
collection
) είναι
ένααντικείμενοπουπεριλαμβάνει
περισσότερααντικείμενα

Σεμια
συλλογή
θέλουμενα
αποθηκεύουμε
,
να
ανακτούμε
καινα
διαχειριζόμαστε
αντικείμενα.
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava5
Συγκεκριμένα

Ναπροσθέτουμεένααντικείμενο

Ναβγάζουμεένααντικείμενο

Ναεντοπίζουμεένααντικείμενο

Ανυπάρχεισυλλογή

Πόσεςφορές

Ανκάποιοισοδύναμότουυπάρχειστησυλλογή

Ναδίνουμεκάποιατιμήκλειδίκαινα
ανακτούμετοαντικείμενο

Ναδιασχίζουμεόλητησυλλογή

Πώςυλοποιούνταιόλααυτά;
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava6
Java Collections Framework

ΤοπλαίσιοσυλλογώντηςJava περιλαμβάνει
βασικέςσυλλογέςαντικειμένων(object
containers)

Διεπαφές
: αφηρημένοιτύποιπουαντιστοιχούνσε
τύπουςσυλλογών(interfacesκαιabstract classes)

Υλοποιήσεις
: τωνπροηγούμενωνδιεπαφών

Αλγορίθμους
: μεθόδουςπουκάνουν
συγκεκριμένεςλειτουργίεςόπωςαναζήτηση,
ταξινόμησηκλπσεαντικείμενατηςσυλλογής
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava7
Διεπαφέςκαιυλοποιήσεις 
Βασικέςδιεπαφές: Collection, Set, List, Map,
SortedSet, SortedMap

Λειτουργικέςδιεπαφές: Comparator, Iterator

Λειτουργικέςτάξεις: Collections, Arrays

Τύποισυλλογών:
SetHashtableΔενεπιτρέπει
Multiset(Bag)ListΕπιτρέπει
διπλότυπα
ΧωρίςσειράΜεσειρά
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava8
Βασικέςδιεπαφές

ΤοCollection είναιηβασικότερησυλλογή,
επιτρέπειδιπλότυπα, δενέχεισειρά

Σεμιασυλλογήμπορούμεναπροσθέσουμε
αφαιρέσουμεστοιχείανατηδιασχίσουμεκαινα
αναζητήσουμεστοιχεία.

ΤοSet δενεπιτρέπειδιπλότυπα

ΕίναιαπόγονοςτουCollectionκαιμπορείνα
επεκταθείγιανακάνειταξινόμηση

ΤοList επιτρέπειδιπλότυπααλλάδιατηρεί
σειρά
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava9
Συλλογέςμεευρετήρια 
ΤοMapεπιτρέπειτηνεισαγωγήστοιχείωνμε
ταυτόχρονηεισαγωγήενόςκλειδιού.

Τοζεύγοςkey-value συνδέειτοσύνολοτων
κλειδιώνμετησυλλογήτωντιμών.

Αυτόσημαίνειότιτακλειδιάδενεπιτρέπουν
διπλοεγγραφέςενώοιτιμέςεπιτρέπουν

Ηδιάσχισητουmapγίνεταιμεδιάσχισητουkey-
set καιανάκτησηκάθεvalue.
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava10
Βασικέςυλοποιήσεις
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava11
Set καιList

ΈναSet

δενπεριέχειδιπλότυπα: π.χ.e1.equals(e2)

περιέχειτοπολύέναστοιχείοnull

ΈχειέναIteratorγιατηδιάσχιση

π.χ. Ταγράμματα‘Α’ως‘Ζ’, το{} κλπ.

ΜιαList

Ταστοιχείατηςείναισεδιάταξη

Επιτρέπειδιπλότυπα

Καισυνεπώςπολλάnullαντικείμενα

Έχειμεθόδουςget καιset μεδείκτηθέσης
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava12
ArrayListκαιLinkedList

ΜιαArrayList

Περικλείειστηνουσίαέναarray

Υλοποιείταπάνταμέσωarrayγι’αυτόκαιμιαεισαγωγήστην
αρχήσημαίνειμετακίνησηόλωντωνπεριεχομένωντης
λίστας

Προσφέρειiteratorγιατηδιάσχισηκαιμεθόδουςget καιset
μεδείκτηθέσης

ΜιαLinkedList

Είναιμιαδιπλάσυνδεδεμένηλίστα

Προσφέρειυλοποιήσειςremove καιinsert πιογρήγορεςαπό
τηνArrayList

Έχειπιοαργήδιάσχιση(ταστοιχείαδενείναισεσυνεχόμενες
θέσειςμνήμης) καιυλοποίησητηςget.
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava13
Δέντρα

ΤαTrees προσφέρουνοργάνωσηαντικειμένωνσεδύο
διαστάσεις

TreeSet:Δυαδικάδέντρααναζήτησης-δυαδικάδέντραμε
σειράσταστοιχείατους

TreeMap: υλοποίησητουMapμετακλειδιάνααποθηκεύονται
σεTreeSet

Γρήγορηδιάσχισηκαι
αναζήτηση

Αργάremove/insertγιατί
προξενούναναδιοργάνωση
τουδέντρου. Πάντωςπιο
γρήγορααπότοArrayList.
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava14
Κατακερματισμος

Hash: Στονκατακερματισμόένακλειδίμετατρέπεται
μεχρήσηκατάλληληςσυνάρτησης(hash function) σε
μιαθέσηπίνακα(ευρετήριο)

HashSet:Tαστοιχείατουset μπαίνουνσεθέσειςτουπίνακα
μεχρήσημιαςσυνάρτησης: θέση=func(στοιχείο)

HashMap: υλοποίησητουMapμετακλειδιάνα
αποθηκεύονταισεHashSet
o1
func
505152
51
o1

Αργήδιάσχιση(απαιτείσυνεχείς
κλήσειςτηςfunc)

Γρήγοραget/setγιατίκαλείμια
φοράτηfuncκαιεντοπίζειτηθέση

Τιγίνεταιανμιαθέσηείναιγεμάτη;
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava15
ΔιεπαφήCollection

Μέθοδοιδιαχείρισης:

size(), isEmpty(), add(Object), remove(Object),
contains(Object), iterator()

Μέθοδοιμαζικήςδιαχείρισης

containsAll(Collection), addAll(Collection),
removeAll(Collection), retainAll(Collecton),
clear():void

Μέθοδοιμεταφοράςσεπίνακα

toArray():Object[], toArray(Type[]):Type[]
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava16
ΔιεπαφήSet

ΈχειτιςίδιεςμεθόδουςμετοCollection

Δενεπιτρέπειδιπλότυπα

ΔύοSet είναιίσαανπεριέχουνταίδιαστοιχεία

s1.containsAll(s2): trueανs2 υποσύνολο
τουs1

s1.addAll(s2): s1 γίνεταιηένωσητωνs1
καιs2

s1.retainAll(s2): s1 γίνεταιητομήτωνs1
καιs2
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava17
ΔιεπαφήList

Συλλογήμεσειρά(ordered collectionήκαι
ακολουθία) καιεπιτρέπειδιπλότυπα

Επιπλέονμέθοδοι:

πρόσβασηςσεθέση

get(int), set(int,Object), add(int,Object), remove(intindex),
addAll(int, Collection)

αναζήτησης

indexOf(Object), lastIndexOf(Object)

διάσχισης

listIterator():ListIterator;

listIterator(int):ListIterator;

Υποσυνόλου

subList(int, int):List;
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava18
ΔιεπαφήMap

Αντιστοιχείκλειδιάσετιμές(key-value)

Δενεγγυάταισειράαλλάμπορείναεμφανιστείσε
υλοποιήσεις

Μέθοδοιδιαχείρισης

put(Object, Object),get(Object), remove(Object),
containsKey(Object), containsValue(Object), size(),
isEmpty()

Μέθοδοιμαζικήςδιαχείρισης

putAll(Mapt), clear()

Μέθοδοιανάκτησης

keySet():Set, values():Collection, entrySet():Set

Μέθοδοιχειρισμούεγγραφής(interface Map.Entry)

getKey(), getValue(), setValue(Object);
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava19
ΔιεπαφήIterator

Χρησιμοποιείταιγιατηδιάσχισητωνσυλλογών

Επιτρέπει

Τονέλεγχογιατηνύπαρξηεπόμενου: hasNext():boolean

Τημετάβασηστοεπόμενοστοιχείο: next():Object

Τηδιαγραφήτουτρέχοντοςστοιχείου: remove():void

Χρησιμοποιούνταιγιανααντικαταστήσουνταfor:
Iteratori = collection.iterator();
while(i.hasNext()) {
Objectvalue= i.next();
....
}
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava20
ΔιεπαφήListIterator

ΚληρονομείτηνIterator

Προσφέρειμεθόδους:

Διάσχισηςτηςλίσταςσεκάθεκατεύθυνση

Τροποποίησηςτηςλίσταςκατάτηδιάσχιση

hasPrevious(), previous(), nextIndex(),
previousIndex(), set(Object), add(Object)

Παράδειγμα:
ListIteratori = list.getListIterator();
while( i.hasNext() )
{ if( object.compareTo(i.next()) < 0 )
{ break;} }
i.add(object);
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava21
Αφηρημένεςτάξεις 
AbstractCollection

Υλοποιείτις: containsAll(Collectionc),
contains(Objecto), removeAll(Collectionc),
remove(Objecto), retainAll(Collectionc) και

Ορίζειτιςadd(Objectobj), iterator();

AbstractSet

Υλοποιείτις: equals(Object) καιhashCode()

Ορίζειτις: size() καιiterator()

AbstractList

Υλοποιείτις: indexOf(Object)καιlastIndexOf(Object)

Ορίζειτις: add() καιlistIterator()
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava22
Διεπαφές–υλοποιήσειςκαιπαρελθόν
HashTable
Properties
TreeMapHashMapMap
Vector
Stack
LinkedListArrayListList
TreeSetHashSetSet
Παλιότερες
υλοποιήσεις
ΥλοποιήσειςΔιεπαφή
Μιατάξηυλοποίησηςμπορείναμηνυλοποιείμιασυγκεκριμένημέθοδο
τουinterface (κάποιεςμέθοδοιείναιπροεραιτικές)
ΣτηνπερίπτωσηαυτήπαράγειUnsupportedOperationException
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava23
Υλοποιήσεις
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava24
Υλοποιήσεις

WeakHashMap
είναιμια
υλοποίησητου
Mapπουκαλεί
τονgarbage
collector ότανένα
κλειδίδε
χρησιμοπείται
πλέον
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava25
ΔικέςμαςυλοποιήσειςτωνCollections

Πρέπειναορίζουνσωστάτις

equals()

hashCode()

ΚαιcompareTo() ήcompare()

ΣταMapναμηχρησιμοποιούνταιπολυμορφικά
αντικείμενα

ΣταMap ηhashCode() πρέπει:

ναεπιστρέφειπάνταίδιατιμήγιατοίδιοαντικείμενο

ναεπιστρέφειίδιατιμήγιαίσααντικείμενα

μπορείναεπιστρέφειίδιατιμήγιαάνισααντικείμεναh
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava26
ΤαξινόμησηκαιΣύγκριση 
ΗδιεπαφήComparableπρέπει

ΝαυλοποιείταιαπόόλαταστοιχείατουSortedSet

ΝαυλοποιείταιαπόόλατακλειδιάτουSortedMap

Ναέχειτημέθοδο: intcompareTo(Objecto)

Ναορίζειτηφυσικήσειράτωνστοιχείων

H διεπαφήComparator

Συγκρίνειδύοαντικείμενα

Ορίζειδικότηςτρόποταξινόμησης

Έχειτημέθοδο: intcompare(Object o1,Object o2)

Έχειτημέθοδο: booleanequals(Objecto)
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava27
ΗτάξηCollections

Περιέχειένασύνολοστατικώνμεθόδωνγιατο
χειρισμόσυλλογών(κυρίωςLists).

Ενσωματώνει:

Μεθόδουςπουυλοποιούναλγορίθμους(sort(List),
binarySearch(List, Object), reverse(List),
shuffle(List), fill(List, Object), copy(Listdest, List
src), min(Collection), max(Collection))

Μεθόδουςμετατροπήςτουτύπουμιαςσυλλογής
(toArray())

Μεθόδουςγιαδημιουργίασυγχρονισμένων
συλλογώνκαισυλλογώνμόνογιαανάγνωση
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava28
Ταξινόμηση

Παράδειγμα:
public static void main (String args[]){
Listl= Arrays.asList( args);
Collections.sort( l );
}

Ηυλοποίησητηςsort μπορείναγίνειμεένα
προσωρινόarray
publicstaticvoidsort(Listlist, Comparatorc){
Objecta[] = list.toArray();
Arrays.sort(a, c); //Αλγόριθμοςmerge sort
ListIteratori =list.listIterator();
for(intj=0;j<a.length; j++) {i.next(); i.set(a[j]);}
}
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava29
Μιαάλληκατηγοριοποίησησυλλογών 
Τροποποιήσιμες/ Μητροποποιήσιμες:
Ανάλογαμετοανυποστηρίζουνμεθόδους
τροποποίησης: add(), remove(), clear()

Σταθερές/ασταθείς(mutable): Ανάλογαμετο
ανεπιτρέπουναλλαγέςκατάτηδιάσχιση:
iterator(), size(), contains()

Σταθερού/μεταβλητούμεγέθους: Ανάλογαμε
τοανδιατηρούντομέγεθόςτουςανεξάρτητα
μετηνπροσθήκηστοιχείων
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava30
Συλλογέςκαινήματα 
Όπωςδείξαμεστηνπροηγούμενηδιάλεξηοι
συλλογέςδενείναιασφαλείςωςπροςτη
χρήσητωνthreads

Ταυτόχρονηπρόσβασηστησυλλογή,
άδειασμαήγέμισμαμιαςσυλλογήςκλππρέπει
ναυλοποιηθούνπρογραμματιστικάγιαναείναι
ασφαλή.
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava31
Πώςεπιλέγουμετύποσυλλογής 
Πώςθέλουμεναεντοπίζουμεαντικείμενα;

ΜεκλειδίMap

ΜεθέσηArrayList(ήarray)

Ποιασειράμαςενδιαφέρειστηδιάσχιση;

ΤαστοιχείαναείναιταξινομημέναTreeSet

ΝαδιατηρείταιησειράεισαγωγήςList

Τιθέλουμεναγίνεταιγρήγορα;

ΠροσθήκηκαιαφαίρεσηστοιχείωνLinkedList

ΑναζήτησηSet
13/12/2005ΠρογραμματισμόςμετηγλώσσαJava32
Tree ήHash

Ανo hashCodeείναισυνεπήςτηςequalsκαι
δενενδιαφέρειησειράδιάσχισης

Χρησιμοποιούμεhashυλοποίηση

Αλλιώςtree

Ανέχουμεκαιτιςδύουλοποιήσεις(Hashκαι
Tree) ηHashείναισυνήθωςπιογρήγορη

ΓιαTree υλοποιήσειςελέγχουμεαν:

ΈχειυλοποιηθείηδιεπαφήComparableήανέχει
οριστείοComparator(στααντικείμενατουSet, ή
στακλειδιάτουMap)