| Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
java:jfc_intf_map [2016/04/13 06:45] gthanos [java.util.Map] |
java:jfc_intf_map [2021/05/28 06:01] |
| ====== java.util.Map ====== | |
| |
| Ένα αντικείμενο τύπου //[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html|Map.Entry]]// αντιστοιχεί "τιμές" σε "κλειδιά". Τόσο οι τιμές όσο και τα κλειδιά μπορεί να είναι οποιουδήποτε τύπου. Ο στόχος της συγκεκριμένης δομής είναι να μπορούμε έχοντας το κλειδί να λάβουμε την τιμή που αντιστοιχεί σε αυτό. Οι μέθοδοι του interface Map.Entry δίνονται στον παρακάτω πίνακα. | |
| {{ :java:map-entry.png |}} | |
| |
| Μία δομή τύπου Map είναι μία δομή που περιέχει εγγραφές τύπου //Map.Entry// με την ιδιαιτερότητα ότι δεν μπορεί να διαθέτει δύο εγγραφές με το ίδιο κλειδί (μπορεί όμως να διαθέτει δύο εγγραφές με διαφορετικά κλειδιά, αλλά ίδιες τιμές). | |
| |
| Η java διατηρεί τρεις βασικές κλάσεις που υλοποιούν το //[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html|Map]]// interface, [[https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html|HashMap]], [[https://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html|TreeMap]] και [[https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html|LinkedHashMap]]. | |
| |
| Βασικές υλοποιήσεις του [[https://docs.oracle.com/javase/7/docs/api/java/util/Map.html|Map]] interface είναι οι παρακάτω: | |
| * **[[https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html|HashMap]]:** Υλοποιεί το Map μέσα από ένα [[wp>Hash_table|HashTable]]. Γρήγορο στην αναζήτηση. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Map. | |
| * **[[https://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html|TreeMap]]:** Υλοποιεί το Map μέσα από ένα [[wp>Red-black_tree|Red-Black tree]]. Πιο αργό στην αναζήτηση, αλλά επίσης αρκετά γρήγορο. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Η σειρά διάτρεξης είναι η σειρά κατάταξης των στοιχείων (υλοποιεί τον interface [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html|SortedMap]]). | |
| * **[[https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html|LinkedHashMap]]:** Υλοποιεί το Map μέσα από ένα [[wp>Hash_table|HashTable]] με παράλληλη χρήση διπλά διασυνδεδεμένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Map. | |
| |
| |
| Διαθέτει τις εξής μεθόδους που δεν διατίθενται στο interface //Collection// ή έχουν διαφορετική λειτουργία από τα interfaces που είδαμε μέχρι τώρα. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#containsKey(java.lang.Object)|containsKey(Object key)]] -** Επιστρέφει true αν η δομή περιέχει το συγκεκριμένο κλειδί | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#containsValue(java.lang.Object)|containsValue(Object value)]] -** Επιστρέφει true αν η δομή περιέχει την συγκεκριμένη τιμή αντιστοιχισμένη με ένα ή περισσότερα κλειδιά. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#remove(java.lang.Object)|remove(Object key)]] -** Διαγράφει την εγγραφή που αντιστοιχεί στο κλειδί //key// επιστρέφοντας την τιμή V ή null αν δεν βρέθηκε το κλειδί. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#replace-K-V-|replace(K key, V value)]] -** Αντικαθιστά την εγγραφή που αντιστοιχεί στο κλειδί //key// επιστρέφοντας την τιμή V. Δεν γίνεται αντικατάσταση αν δεν βρεθεί το κλειδί στο Map. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#put(K,%20V)|put(K key, V value)]] -** A Διαγράφει την εγγραφή που αντιστοιχεί στο κλειδί //key// επιστρέφοντας την τιμή V ή null αν δεν υπήρχε προηγούμενη καταχώρηση για το συγκεκριμένο κλειδί. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#get(java.lang.Object)|get(Object key)]] -** Επιστρέφει την τιμή που αντιστοιχεί στο δεδομένο κλειδί ή null αν δεν υπάρχει καταχώρηση για το συγκεκριμένο κλειδί. | |
| |
| ==== Μετατροπή του Map σε μορφή που να μπορείτε να το διατρέξετε (Collection ή Set) ==== | |
| |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#entrySet()|entrySet()]] -** Επιστρέφει ένα //Set// από καταχωρήσεις τύπου //Entry.Map// όπου κάθε καταχώρηση περιέχει το συνδυασμό κλειδί-τιμή. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#values()|values()]] -** Επιστρέφει ένα //Collection// με τις τιμές του //Map// δίχως τα κλειδιά. Μία τιμή μπορεί να εμφανίζεται περισσότερες από μία φορές αν αντιστοιχεί σε περισσότερα του ενός κλειδιά. | |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#keySet()|keySet()]] -** Επιστρέφει ένα //Set// με τα κλειδιά. | |
| |
| <code java StudentMap.java> | |
| import java.util.*; | |
| import java.lang.*; | |
| |
| public class StudentMap { | |
| |
| private Map<Integer,Student> students; | |
| | |
| public StudentMap() { | |
| students = new LinkedHashMap<Integer,Student>(); | |
| populateMap(); | |
| } | |
| | |
| public final void populateMap() { | |
| students.put(1, new Student("John", "Smith")); | |
| students.put(2, new Student("Stanley", "Peters")); | |
| students.put(3, new Student("Edgar", "Bloch")); | |
| students.put(4, new Student("Suzan", "Miles")); | |
| students.put(5, new Student("Mary", "Poppins")); | |
| } | |
| | |
| public void iterateMapEntries() { | |
| Set set = students.entrySet(); | |
| Iterator it = set.iterator(); | |
| while(it.hasNext()) { | |
| System.out.println(it.next().toString()); | |
| } | |
| } | |
| | |
| public void iterateMapValues() { | |
| Collection col = students.values(); | |
| Iterator it = col.iterator(); | |
| while(it.hasNext()) { | |
| System.out.println(it.next().toString()); | |
| } | |
| } | |
| | |
| public void iterateMapKeys() { | |
| Set set = students.keySet(); | |
| Iterator it = set.iterator(); | |
| while(it.hasNext()) { | |
| System.out.println(it.next().toString()); | |
| } | |
| } | |
| | |
| public static void main(String args[]) { | |
| StudentMap stl = new StudentMap(); | |
| System.out.println("Map keys are:"); | |
| stl.iterateMapKeys(); | |
| System.out.println("Map values are:"); | |
| stl.iterateMapValues(); | |
| System.out.println("Map key-value pairs are:"); | |
| stl.iterateMapEntries(); | |
| } | |
| } | |
| </code> | |
| |
| |
| |
| |
| |
| |