Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 10. Πίνακες Κατακερματισμού 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 16/12/2016
Πίνακες (Μια παλιά άσκηση) Σε έναν πίνακα A, n θέσεων, έχουμε: Εισαγωγή: O(1) Αναζήτηση: O(n) ιαγραφή: O(n)(αναζήτηση + μετακίνηση στοιχείων) Ερώτημα Αν θέλουμε να αποθηκεύουμε σε έναν πίνακα οποιοδήποτε υποσύνολο των ακέραιων τιμών 0,1,2,,n-1, μπορούμε να βελτιώσουμε το χρόνο των πράξεων Αναζήτηση και ιαγραφή, χωρίς να αυξήσουμε τον χρόνο εισαγωγής? Αν ναι, πώς? Δομές Δεδομένων, 3ο Εξάμηνο 2
Πίνακες (Μια παλιά άσκηση) Ερώτημα Μπορούμε να πετύχουμε το ίδιο για οποιοδήποτε υποσύνολο οποιουδήποτε συνόλου δεδομένων Ν στοιχείων? Δομές Δεδομένων, 3ο Εξάμηνο 3
Εισαγωγή Πίνακας κατακερματισμού: ομή δεδομένων που προσφέρει πολύ γρήγορη εισαγωγή και αναζήτηση Η αναζήτηση, εισαγωγή (μερικές φορές και διαγραφή) εκτελούνται σχεδόν σε σταθερό χρόνο Ο(1) Πίνακες κατακερματισμού είναι σημαντικά πιο γρήγοροι από τα δέντρα τα οποία αποδίδουν σε σχετικά γρήγορο χρόνο Ο(logN) Δομές Δεδομένων, 3ο Εξάμηνο 4
Μειονεκτήματα Βασίζονται σε πίνακες και είναι δύσκολο να επεκταθούν μετά την δημιουργία τους Η απόδοση μπορεί να μειωθεί σημαντικά όταν ένας πίνακας υπερκορεστεί εν υπάρχει κάποιος εύκολος τρόπος να γίνουν επισκέψεις στα στοιχεία με συγκεκριμένη σειρά Δομές Δεδομένων, 3ο Εξάμηνο 5
Πίνακες/Συναρτήσεις Κατακερματισμού Βασικό στοιχείο είναι ο τρόπος με τον οποίον ένα εύρος τιμών κλειδιών μετασχηματίζονται σ ένα εύρος δεικτών πίνακα Ο μετασχηματισμός αυτός επιτυγχάνεται στους πίνακες κατακερματισμού με μία συνάρτηση κατακερματισμού Απλή περίπτωση, χωρίς χρήση συνάρτησης κατακερματισμού Τιμές κλειδιών δείκτες πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 6
Τρόπος Λειτουργίας Η συνάρτηση κατακερματισμού μετασχηματίζει τα κλειδιά σε θέσεις στο πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 7
Παράδειγμα Τρόπου Λειτουργίας: Τηλεφωνικός Κατάλογος Πηγή: http://en.wikipedia.org/wiki/hash_table Δομές Δεδομένων, 3ο Εξάμηνο 8
Παραδείγματα Χρήσης Πρόσβαση σε εγγραφές υπαλλήλων Αριθμοί υπαλλήλων 1-1000 Οι αριθμοί υπαλλήλων κλειδιά στην προσπέλαση εγγραφών Τι είδους δομή δεδομένων θα πρέπει να χρησιμοποιηθεί σ αυτή την περίπτωση; Δομές Δεδομένων, 3ο Εξάμηνο 9
Παραδείγματα Χρήσης (Συνέχεια) Υπάλληλος_1 Υπάλληλος_2 Υπάλληλος_72 Αριθμοί δεικτών ίδιοι με τους αριθμούς υπαλλήλων Προσπέλαση στοιχείου πίνακα... Υπάλληλος_1000 1 2 72 1000... emprecord rec = databasearray[72]; Προσθήκη στοιχείου databasearray[totalemployees++] = newrecord; Δομές Δεδομένων, 3ο Εξάμηνο 10
Παραδείγματα Χρήσης (Συνέχεια) Χρήση πίνακα απλή και αποδοτική δομή για την προσπέλαση των στοιχείων Περιορισμοί: Καλά τακτοποιημένα κλειδιά Περιορισμένος αριθμός διαγραφών ιαγραφές οδηγούν σε κενά στην μνήμη Στοιχεία μπορούν να προστίθενται μόνο στο τέλος του πίνακα Μέγεθος πίνακα σταθερό Πώς θα διαχειριστούμε περιπτώσεις που τα κλειδιά δεν πληρούν τους περιορισμούς του πίνακα? Ο πίνακας κατακερματισμού είναι μία κατάλληλη δομή δεδομένων Δομές Δεδομένων, 3ο Εξάμηνο 11
Εφαρμογές Πινάκων Κατακερματισμού Μεταγλωττιστές γλωσσών προγραμματισμού ιατήρηση πίνακα συμβόλων σε πίνακα κατακερματισμού (ονόματα μεταβλητών/συναρτήσεων, διευθύνσεις στη μνήμη) Λεξικό όρων Κάθε λέξη καταλαμβάνει ένα κελί σε έναν πίνακα Προσπέλαση της λέξης χρησιμοποιώντας έναν αριθμό δείκτη Δομές Δεδομένων, 3ο Εξάμηνο 12
Συνάρτηση Κατακερματισμού Μία συνάρτηση κατακερματισμού μετατρέπει το αντικείμενο σε έναν ακέραιο κατάλληλο για δεικτοδότηση σε έναν πίνακα που είναι αποθηκευμένο το αντικείμενο h: O [0, M) Εάν η συνάρτηση είναι 1-1, μπορούμε να προσπελάσουμε το αντικείμενο με βάση το δείκτη του στον πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 13
Ιδιότητες Συνάρτησης Κατακερματισμού 1. Κατανομή κλειδιών ομοιόμορφα στο χώρο 2. ύο εγγραφές δεν μπορούν να καταλαμβάνουν την ίδια θέση 3. ιατήρηση της σειράς k i k j, i j: h(k i ) h(k j ) ύσκολο να βρεθεί μία τέτοια συνάρτηση κατακερματισμού Η 2 η ιδιότητα είναι η πιο σημαντική!! Σύγκρουση: ύο ή περισσότερα διαφορετικά αντικείμενα μπορεί να αντιστοιχίζονται μέσω της συνάρτησης στην ίδια θέση Δομές Δεδομένων, 3ο Εξάμηνο 14
Πρωτογενείς Τύποι Δεδομένων Μπορούμε να αντιστοιχίσουμε κάθε τιμή ενός βασικού τυπού σε μία τιμή τύπου int Τύπος char: κάθε χαρακτήρας κατακερματίζεται σε έναν μοναδικό θετικό ακέραιο (όπως ορίζεται στο Unicode) Αφηρημένοι τύποι δεδομένων δεν έχουν προκαθορισμένες τιμές Υπολογισμός της τιμής κατακερματισμού για κάθε αντικείμενο με βάση μία πολυωνυμική συνάρτηση Δομές Δεδομένων, 3ο Εξάμηνο 15
Συνάρτηση Κατακερματισμού Έστω ο αριθμός 1234 είναι μία συλλογή από ψηφία 1, 2, 3 και 4 110 3 + 210 2 + 310 1 +410 0 Έστω το string junk συλλογή από χαρακτήρες j, u, n, k ASCII χαρακτήρες αναπαριστώνται με 7bits σαν ένας αριθμός 0 και 127 128 3 j + 128 2 u + 128 1 n + 128 0 k Για να αντιστοιχίσουμε μεγάλους αριθμούς (όπως προκύπτουν από την μετατροπή strings σε αριθμούς) χρειαζόμαστε μία συνάρτηση (συνάρτηση κατακερματισμού) Έστω tablesize το μέγεθος του πίνακα T Εάν x είναι ένας ακέραιος η συνάρτηση x%tablesize παράγει αριθμό στο διάστημα [0, tablesize-1] κατάλληλο για δεικτοδότηση στο πίνακα T Δομές Δεδομένων, 3ο Εξάμηνο 16
Κατακερματισμός Αντικειμένων Έστω αντικείμενα της τάξης C έχουν k το πλήθος πεδία τύπου int O=(x 0,, x k-1 ) Η τιμή κατακερματισμού για κάθε αντικείμενο ο επιλέγοντας μία θετική σταθερά α, υπολογίζεται ως h(x 0 )α k-1 + h(x 1 )α k-2 + +h(x k-2 )α+h(x k-1 ) ή h(x k-1 ) + α(h(x k-2 ) +α(h(x k-3 )+...+α(h(x 1 )+αh(x 0 ))...)) Δομές Δεδομένων, 3ο Εξάμηνο 17
Διαχείριση Συγκρούσεων Έχοντας μία συνάρτηση κατακερματισμού, τι θα κάνουμε σε περίπτωση σύγκρουσης (collision)? Εάν το στοιχείο Χ κατακερματιστεί σε θέση που είναι ήδη κατειλημμένη, πού θα το τοποθετήσουμε? Δομές Δεδομένων, 3ο Εξάμηνο 18
Ανοιχτή Διεύθυνση Όταν ένα στοιχείο δεν μπορεί να τοποθετηθεί στο δείκτη που υπολογίστηκε από τη συνάρτηση κατακερματισμού, το πρόγραμμα ψάχνει για άλλη θέση στον πίνακα Μέθοδοι ανοικτής διεύθυνσης (open addressing) Γραμμική εξέταση (linear probing) ευτεροβάθμια εξέταση (quadratic probing) ιπλός κατακερματισμός (double hashing) Δομές Δεδομένων, 3ο Εξάμηνο 19
Ανοιχτή Διεύθυνση: Γραμμική Εξέταση Σειριακή αναζήτηση στον πίνακα μέχρι να βρούμε κενό κελί Εάν Η είναι το αποτέλεσμα της συνάρτησης κατακερματισμού και υπάρχει σύγκρουση τότε η αναζήτηση γίνεται στις θέσεις Η+1, Η+2, Η+3,..., Η+ι Βασικές λειτουργίες: Αναζήτηση, Εισαγωγή, ιαγραφή ιαγραφή Ένα αντικείμενο στον πίνακα κατακερματισμού δεν αναπαριστά μόνο τον εαυτό του αλλά συνδέει επίσης και άλλα αντικείμενα. Εικονική διαγραφή: Εάν διαγραφεί πραγματικά ένα στοιχείο, η διαδικασία αναζήτησης στον πίνακα μπορεί να αποτύχει Δομές Δεδομένων, 3ο Εξάμηνο 20
Δομές Δεδομένων, 3ο Εξάμηνο 21
Κλάση DataItem Δομές Δεδομένων, 3ο Εξάμηνο 22
December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 23
Δομές Δεδομένων, 3ο Εξάμηνο 24
December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 25
Γραμμική Εξέταση: Δημιουργία Δεσμών Γραμμική εξέταση ημιουργία δεσμών (clusters) Μεγάλες ακολουθίες εξέτασης Προσπέλαση κελιών στο τέλος της ακολουθίας πολύ αργή Το πρόβλημα των δεσμών (primary clustering) είναι μεγαλύτερο όσο πιο γεμάτος είναι ο πίνακας εν είναι σημαντικό το πρόβλημα όταν ο πίνακας είναι κατά το ήμισυ γεμάτος Δομές Δεδομένων, 3ο Εξάμηνο 26
Επέκταση Πίνακα Ανακατακερματισμός Όταν ο πίνακας γεμίζει πολύ, μια επιλογή που έχουμε είναι να τον επεκτείνουμε ημιουργώντας νέο πίνακα και εισάγοντας ένα-ένα τα στοιχεία με χρήση της insert() Η διαδικασία αυτή καλείται ανακατακερματισμός (rehashing) εν μπορούμε απλά να αντιγράψουμε τα στοιχεία στο νέο πίνακα! Συνήθως, διπλασιάζεται το μέγεθος του πίνακα Όμως το μέγεθος πρέπει να είναι πρώτος αριθμός (γιατί?) private boolean isprime(int n) { for (int j=2 ; (j*j <= n) ; j++) if (n % j == 0) return false; return true; } Δομές Δεδομένων, 3ο Εξάμηνο 27
Ανοιχτή Διεύθυνση: Δευτεροβάθμια Εξέταση Συντελεστής φόρτου (load factor) loadfactor = nitems / arraysize Η δευτεροβάθμια εξέταση προσπαθεί να αντιμετωπίσει το πρόβλημα της γραμμικής εξέταση Εξετάζει συγκεκριμένα κελιά μακριά από το αρχικό σημείο σύγκρουσης ιαχείριση συγκρούσεων με βάση τη συνάρτηση F(i) = i 2 Εάν η συνάρτηση κατακερματισμού οδηγεί στο Η και το Η είναι γεμάτο, τότε δοκιμάζουμε τα κελιά Η+1 2, Η+2 2, Η+3 2,...Η+ι 2 Δομές Δεδομένων, 3ο Εξάμηνο 28
December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 29
Απόδοση Δευτεροβάθμιας Εξέτασης Υλικό από τις Δομές διαφάνειες Δεδομένων, 3ο του Εξάμηνο Ορέστη Τελέλη 30
Απόδειξη (1/2) Υλικό από τις Δομές διαφάνειες Δεδομένων, 3ο του Εξάμηνο Ορέστη Τελέλη 31
Απόδειξη (2/2) Υλικό από τις Δομές διαφάνειες Δεδομένων, 3ο του Εξάμηνο Ορέστη Τελέλη 32
Πρόβλημα με Δευτεροβάθμια Εξέταση ευτεροβάθμια εξέταση οδηγεί σε δευτερεύουσα δημιουργία δεσμών (secondary clustering) Ο αλγόριθμος που παράγει την ακολουθία βημάτων στη δευτεροβάθμια εξέταση παράγει πάντα τα ίδια βήματα: 1, 4, 9, 16 Π.χ. 184, 302, 420, 544 μετασχηματίζονται στο 7 και εισάγονται στον πίνακα με αυτήν τη σειρά 302 εξέταση ενός βήματος 420εξέταση 4 βημάτων 544εξέταση 9 βημάτων Κάθε επιπλέον στοιχείο με κλειδί που μετασχηματίζεται σε 7 θα χρειάζεται μία ακόμα μεγαλύτερη εξέταση Δομές Δεδομένων, 3ο Εξάμηνο 33
Ανοιχτή Διεύθυνση: Διπλός Κατακερματισμός (1) Λύση στο πρόβλημα της δημιουργίας δεσμών Παραγωγή σειράς εξέτασης που εξαρτώνται από το κλειδί αντί να είναι η ίδια για κάθε κλειδί Για ένα δεδομένο κλειδί, το μέγεθος βήματος παραμένει σταθερό σε όλη την εξέταση, αλλά είναι διαφορετικό για διαφορετικά κλειδιά Δομές Δεδομένων, 3ο Εξάμηνο 34
Ανοιχτή Διεύθυνση: Διπλός Κατακερματισμός (2) Η δευτερεύουσα συνάρτηση κατακερματισμού πρέπει να έχει συγκεκριμένα χαρακτηριστικά: εν πρέπει να είναι η ίδια με την πρωτεύουσα συνάρτηση κατακερματισμού. εν πρέπει ποτέ να έχει έξοδο 0 (αλλιώς κάθε εξέταση θα κατέληγε στο ίδιο κελί και ο αλγόριθμος θα εκτελούσε ένα συνεχή βρόγχο). Έχει αποδειχθεί ότι οι συναρτήσεις της παρακάτω μορφής αποδίδουν πολύ καλά: stepsize = constant (key % constant) όπου constant πρέπει να είναι πρώτος αριθμός και μικρότερος από το μέγεθος πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 35
Κώδικας για ιπλό Κατακερματισμό December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 36
Το Μέγεθος Πίνακα να είναι Πρώτος Αριθμός Έστω πίνακας 15 θέσεων (δείκτες 0 ως 14) Έστω κλειδί που κατακερματίζεται στη θέση 0 με βήμα 5 Τότε η ακολουθία εξέτασης θα είναι: 0, 5, 10, 0, 5, 10,... ΠΡΟΒΛΗΜΑ Εάν το μέγεθος πίνακα ήταν 13 (πρώτος): 0, 5, 10, 2, 7, 12, 4, 9, 1, 6, 11, 3... Δομές Δεδομένων, 3ο Εξάμηνο 37
Ξεχωριστή Αλυσίδα (1) Μία διαφορετική προσέγγιση, που ονομάζεται Ξεχωριστή Αλυσίδα (separate chaining), είναι να εγκαταστήσουμε μία συνδεδεμένη λίστα σε κάθε δείκτη στον πίνακα κατακερματισμού. Η βασική ιδέα είναι: Το κλειδί ενός στοιχείου μετασχηματίζεται στο δείκτη με βάση τη συνάρτηση κατακερματισμού και το στοιχείο εισάγεται στη συνδεδεμένη λίστα Τα στοιχεία που κατακερματίζονται στον ίδιο δείκτη απλώς προστίθενται στη συνδεδεμένη λίστα. Δομές Δεδομένων, 3ο Εξάμηνο 38
Ξεχωριστή Αλυσίδα (2) Συντελεστής φόρτου αριθμός στοιχείων / μέγεθος πίνακα Στην ξεχωριστή αλυσίδα μπορούμε να τοποθετήσουμε Ν ή περισσότερα στοιχεία σε πίνακα Ν κελιών Ο χρόνος που απαιτείται για την προσπέλαση των στοιχείων αυξάνεται καθώς αυξάνεται το μέγεθος της λίστας ιπλοεγγραφές Επιτρέπονται- Μπορεί να παραχθούν κατά τη διαδικασία εισαγωγής στοιχείων ιαγραφή Ο αλγόριθμος κατακερματίζει το κλειδί στη κανονική λίστα και μετά διαγράφει το στοιχείο από τη λίστα Δομές Δεδομένων, 3ο Εξάμηνο 39
Παράδειγμα Ξεχωριστής Αλυσίδας κενό 906 881 807 κενό 458 383 333 559 Πίνακας Συνδεδεμένες λίστες Δομές Δεδομένων, 3ο Εξάμηνο 40
Δομές Δεδομένων, 3ο Εξάμηνο 41
December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 42
Καλές Επιλογές για Συναρτήσεις Κατακερματισμού Η συνάρτηση κατακερματισμού πρέπει να Υπολογίζεται γρήγορα Κατανέμει με ομοιόμορφο τυχαίο τρόπο τα κλειδιά στις θέσεις του πίνακα Μη χρησιμοποιεί άχρηστη πληροφορία Π.χ. Κωδικοί της μορφής 033-400-03-94-05-0-535 Χρησιμοποιεί όλα τα δεδομένα Εάν είναι η mod (%) να χρησιμοποιεί πρώτο αριθμό για τη βάση του διαιρέτη Δομές Δεδομένων, 3ο Εξάμηνο 43
Απόδοση Κατακερματισμού Η εισαγωγή και η αναζήτηση προσεγγίζουν το χρόνο Ο(1) (αν δε συμβεί καμία σύγκρουση) Αν συμβούν συγκρούσεις, ο χρόνος εξαρτάται από το μήκος της ακολουθίας των στοιχείων που θα εξεταστούν Το μέσο μήκος εξέτασης εξαρτάται από το συντελεστή φόρτου Έστω P: το μήκος εξέτασης και L: ο συντελεστής φόρτου Δομές Δεδομένων, 3ο Εξάμηνο 44
Απόδοση Γραμμικής Εξέτασης Επιτυχής αναζήτηση: P = ( 1 + 1 / (1 L) 2 ) / 2 Ανεπιτυχής αναζήτηση: P = ( 1 + 1 / (1 L) ) / 2 Ο συντελεστής φόρτου πρέπει να διατηρείται κάτω από το 2/3 και ακόμα καλύτερα κάτω από το 1/2 Μέσο μήκος εξέτασης Ανεπιτυχής 1.0 Συντελεστής φόρτου Επιτυχής Donald E.Knuth: The Art of Computer Programming Τόμος 3: Sorting and Searching Δομές Δεδομένων, 3ο Εξάμηνο 45
Απόδοση Δευτεροβάθμιας Εξέτασης και Διπλού Κατακερματισμού Επιτυχής αναζήτηση: P = - log ( 1 L ) / L Ανεπιτυχής αναζήτηση: P = 1 / ( 1 L) Με συντελεστή φόρτου 0.5 επιτυχείς και ανεπιτυχείς αναζητήσεις απαιτούν κατά μέσο όρο 2 εξετάσεις Μέσο μήκος εξέτασης 2 Ανεπιτυχής Επιτυχής 0.5 1.0 Συντελεστής φόρτου Δομές Δεδομένων, 3ο Εξάμηνο 46
Απόδοση Ξεχωριστής Αλυσίδας Έστω arraysize στοιχεία στον πίνακα και Ν το πλήθος των στοιχείων που έχουν εισαχθεί Κάθε λίστα περιέχει κατά μέσο όρο AverageListLength = N / arraysize Ίδιο με το συντελεστή φόρτου L = N / arraysize Αναζήτηση Επιτυχής: 1 + L / 2 Ανεπιτυχής: 1 + L Εισαγωγή Μη ταξινομημένες λίστες: Ο(1) Ταξινομημένες λίστες: 1 + L / 2 Μέσο μήκος εξέτασης Ανεπιτυχής Επιτυχής 1.0 Συντελεστής φόρτου Δομές Δεδομένων, 3ο Εξάμηνο 47
Συμπερασματικά Αν χρησιμοποιείται ανοιχτή διεύθυνση, ο διπλός κατακερματισμός είναι πιθανώς το καλύτερο σύστημα Με μικρή υπεροχή ως προς τη δευτεροβάθμια εξέταση Αν υπάρχει άφθονη μνήμη, η γραμμική εξέταση είναι πιο απλή στην υλοποίηση και η απόδοση επιβαρύνεται λίγο εφόσον ο συντελεστής φόρτου είναι κάτω από 0.5 Αν δε γνωρίζουμε το πλήθος των στοιχείων που θα εισαχθούν, τότε προτιμούμε ξεχωριστή αλυσίδα αντί για ανοιχτή διεύθυνση Όταν αυξάνεται ο συντελεστής φόρτου, η απόδοση της ξεχωριστής αλυσίδας μειώνεται μόνο γραμμικά Όταν δεν είμαστε βέβαιοι, προτιμούμε την ξεχωριστή αλυσίδα που απαιτεί μεν κλάση συνδεδεμένης λίστας, αλλά η προσθήκη περισσότερων των αναμενόμενων δεδομένων δεν προκαλεί δραματική μείωση της απόδοσης Δομές Δεδομένων, 3ο Εξάμηνο 48
Εξωτερικός Κατακερματισμός (External Hashing) ιατηρείται ένας πίνακας κατακερματισμού στο δίσκο που περιέχει αριθμούς μπλοκ, οι οποίοι αναφέρονται σε μπλοκ εξωτερικής αποθήκευσης December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 49 Fundamentals of Database Systems by Elmasri and Navathe 2nd edition
Άσκηση Δομές Δεδομένων, 3ο Εξάμηνο 50
Πίνακες Κατακερματισμού στη Java Κλάση HashMap Παρέχεται από το πακέτο java.util Απαιτείται import java.util.hashmap; Constructor Κατασκευάζει HashMap() HashMap(int size) HashMap(int size, float lf) HashMap(HashMap m) Άδειο πίνακα 16 θέσεων με μέγιστο συντελεστή φόρτου 0.75 Άδειο πίνακα size θέσεων με μέγιστο συντελεστή φόρτου 0.75 Άδειο πίνακα size θέσεων με μέγιστο συντελεστή φόρτου lf Πίνακα με χαρακτηριστικά και τα στοιχεία του m Δομές Δεδομένων, 3ο Εξάμηνο 51
Δημιουργία Πίνακα Κατακερματισμού στη Java Η κλάση HashMap έχει οριστεί με χρήση Java Generics Στη δήλωση αναφοράς σε αντικείμενο τύπου HashMap πρέπει να δηλώσουμε Τον τύπο των κλειδιών K(αυτά κατακερματίζονται) Τον τύπο των δεδομένων (τιμών) V Με δήλωση του είδους HashMap<K,V> hmap; εν μπορούν να είναι βασικοί τύποι (int, float, double, char, ) Υποκαθιστούνται από σύνθετους τύπους Integer, Float, Double (με κεφαλαίο το πρώτο γράμμα) Επιτρέπονται σύνθετοι τύποι (κλάσεις) που έχουμε ορίσει Δομές Δεδομένων, 3ο Εξάμηνο 52
Παραδείγματα Πίνακας με κλειδιά τύπου Integer και τιμές τύπου String HashMap<Integer,String> hm = new HashMap<Integer,String>(); Πίνακας με κλειδιά τύπου String και τιμές τύπου MyClass HashMap<String,MyClass> hm = new HashMap<String,MyClass>(20); Δομές Δεδομένων, 3ο Εξάμηνο 53
Μέθοδοι Πινάκων Κατακερματισμού στη Java Μέθοδοςkey V put(k key, V value) V remove(object key) V get(object key) boolean isempty() boolean containskey(object key) boolean containsvalue(object value) int size() Λειτουργία Εισάγει το ζεύγος key, value ιαγράφει την εγγραφή για κλειδί key Επιστρέφει την τιμή για κλειδί key Επιστρέφει true αν ο πίνακας είναι άδειος Επιστρέφει true αν ο πίνακας περιέχει ζεύγος για το κλειδί key Επιστρέφει true αν ο πίνακας περιέχει ζεύγος με την τιμή value Επιστρέφει πλήθος ζευγών Δομές Δεδομένων, 3ο Εξάμηνο 54
Παράδειγμα Δομές Δεδομένων, 3ο Εξάμηνο 55