This is an old revision of the document!
Τα παραπάνω interfaces επιτρέπουν την αντιστοίχιση τιμών σε κλειδιά. Σκεφτείτε για παράδειγμα το ΑΕΜ σας, όπου είναι ένα μοναδικό κλειδί πάνω στο οποίο είναι συνδεδεμενη πληροφορία σχετικά με τα προσωπικά σας στοιχεία, τα μαθήματα που έχετε εξεταστεί, τα μαθήματα που έχετε επιτύχει και τη βαθμολογία κάθε μαθήματος κ.α. Σε αναλογία μία δομή τύπου java.util.Map επιτρέπει την αντιστοίχιση κλειδιών σε τιμές. Τόσο τα κλειδιά, όσο και οι τιμές οφείλουν να είναι αντικείμενα.
Ένα αντικείμενο τύπου java.util.Map.Entry περιέχει ένα “κλειδί” και μία “τιμή” που αντιστοιχεί σε αυτό το κλειδί. Οι μέθοδοι του interface Map.Entry δίνονται στον παρακάτω πίνακα.
Μία δομή τύπου java.util.Map είναι μία δομή που περιέχει εγγραφές τύπου Map.Entry με τον περιορισμό ότι δεν μπορεί να διαθέτει δύο εγγραφές με το ίδιο κλειδί (μπορεί όμως να διαθέτει δύο εγγραφές με διαφορετικά κλειδιά, αλλά κοινές τιμές για τα κλειδιά αυτά).
Βασικό χαρακτηριστικό μίας δομής τύπου java.util.Map είναι ότι δεν υπάρχει δυνατότητα διάτρεξης της δομής. Μπορείτε να εξετάσετε εάν υπάρχει ένα κλειδί, να διαγράψετε την εγγραφή που αντιστοιχεί σε ένα κλειδί, να διατρέξετε τα κλειδιά της δομής, να διατρέξετε τις τιμές της δομής, αλλά δεν σας δίνεται η δυνατότητα να διατρέξετε τις εγγραφές τύπου Map.Entry.
Διαθέτει τις εξής μεθόδους που δεν διατίθενται στο interface Collection ή έχουν διαφορετική λειτουργία από τα interfaces που είδαμε μέχρι τώρα.
Τo interface java.util.SortedMap είναι ένα Map διαθέτει τις εγγραφές ταξινομημένες με βάση τα κλειδιά . Ένα java.util.SortedMap υλοποιείται συνήθως μέσω ενός ισοζυγισμένου δυαδικού δέντρου. Οι επιπλέον μέθοδοι του συγκεκριμένου interface είναι οι εξής:
Βασικές υλοποιήσεις του Map interface είναι οι παρακάτω:
Παραλλάσουμε το παράδειγμα της λίστας, ώστε από τη λίστα να φτιαχτεί ένα ιστόγραμμα το οποίο δείχνει κάθε λέξη πόσες φορές εμφανίζεται μέσα στο κείμενο. Το ιστόγραμμα μπορεί να φτιαχτεί με τη βοήθεια ενός Map<String,Integer>, όπου τα κλειδιά είναι οι λέξεις του κειμένου και οι τιμές είναι η συχνότητα εμφάνισης της λέξης μέσα στο κείμενο.
import java.util.*; import java.io.*; public class MapExample { public static void main(String []args) { List<String> wordsList = new ArrayList<>(); try(Scanner sc = new Scanner(new File(args[0]))) { while(sc.hasNext()) { String word = sc.next().toLowerCase(); wordsList.add(word); } Map<String,Integer> wordHistogram= new TreeMap<>(); Iterator<String> it = wordsList.iterator(); while(it.hasNext()) { String word = it.next(); if(wordHistogram.containsKey(word)) wordHistogram.put(word, wordHistogram.get(word) + 1); else wordHistogram.put(word, 1); } for(String word : wordHistogram.keySet()) System.out.println(word+" -> "+ wordHistogram.get(word)); } catch(FileNotFoundException ex) { System.out.println("Unable to open file \""+args[0]+"\""); } } }
Τι θα γίνει εάν στο παραπάνω παράδειγμα αντί για java.util.TreeMap χρησιμοποιήσουμε java.util.HashMap; Σημειώστε ότι η κλάση java.util.TreeMap υλοποιεί τα interfaces java.util.Map και java.util.SortedMap, ενώ η κλάση java.util.HashMap μόνο τη interface java.util.Map. Δοκιμάστε το…
import java.util.*; public class StudentMap { public static void printMapEntries(Map<Integer,Student> map) { Set<Map.Entry<Integer,Student>> set = map.entrySet(); Iterator<Map.Entry<Integer,Student>> it = set.iterator(); while(it.hasNext()) { Map.Entry<Integer,Student> entry = it.next(); System.out.println(entry.getKey() + " -> "+ entry.getValue() ); } } public static void printMapValues(Map<Integer,Student> map) { Collection<Student> coll = map.values(); Iterator<Student> it = coll.iterator(); while(it.hasNext()) { System.out.println(it.next().toString()); } } public static void printMapKeys(Map<Integer,Student> map) { Set<Integer> set = map.keySet(); Iterator<Integer> it = set.iterator(); while(it.hasNext()) { System.out.println(it.next().toString()); } } public static void main(String args[]) { Map<Integer,Student> students = new HashMap<>(); 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")); System.out.println("\nMap keys are:"); printMapKeys(students); System.out.println("\nMap values are:"); printMapValues(students); System.out.println("\nMap key-value pairs are:"); printMapEntries(students); } }
| Προηγούμενο: Interface java.util.List | Περιεχόμενα | Επόμενο: Sorting |