Both sides previous revisionPrevious revisionNext revision | Previous revision |
java:jfc_intf_map [2020/03/12 21:20] – gthanos | java:jfc_intf_map [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 |
---|
===== Το interface java.util.SortedMap ===== | ===== Το interface java.util.SortedMap ===== |
| |
Εκτός του //interface// [[http://docs.oracle.com/javase/7/docs/api/java/util/Map.html|java.util.Map]] διατίθεται και το //interface// [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html|java.util.SortedMap]] το οποίο διαθέτει τις εγγραφές ταξινομημένες με βάση τα κλειδιά . Ένα [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html|java.util.SortedMap]] υλοποιείται συνήθως μέσω ενός ισοζυγισμένου δυαδικού δέντρου. | Τo interface [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html|java.util.SortedMap]] είναι ένα //Map// διαθέτει τις εγγραφές ταξινομημένες με βάση τα κλειδιά . Ένα [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html|java.util.SortedMap]] υλοποιείται συνήθως μέσω ενός ισοζυγισμένου δυαδικού δέντρου. Οι επιπλέον μέθοδοι του συγκεκριμένου interface είναι οι εξής: |
| |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#firstKey()|firstKey()]] - ** Επιστρέφει το 1ο κλειδί. |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#lastKey()|lastKey()]] - ** Επιστρέφει το τελευταίο κλειδί. |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#headMap(K)|headMap(K toKey)]] - ** Επιστρέφει το υποσύνολο του Map που τα κλειδιά του είναι μικρότερα από την τιμή //toKey//. |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#tailMap(K)|tailMap(K fromKey)]] - ** Επιστρέφει το υποσύνολο του Map που τα κλειδιά του του είναι μεγαλύτερα ή ίσα από την τιμή //fromKey//. |
| * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#subMap(K,%20K)|subMap(K fromKey, K toKey)]] - ** Επιστρέφει το υποσύνολο του Set από fromKey (μαζί με το fromKey) έως toKey (χωρίς το toKey). |
| |
===== Υλοποιήσεις ===== | ===== Υλοποιήσεις ===== |
* **[[https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html|LinkedHashMap]]:** Υλοποιεί το Map μέσα από ένα [[wp>Hash_table|HashTable]] με παράλληλη χρήση διπλά συνδεδεμένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Map. Η κλάση που υλοποιεί το κλειδί κάθε εγγραφής πρέπει να υλοποιεί τις μεθόδους [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-|public boolean equals(Object obj)]] και [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--|public int hashCode()]] της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html|java.lang.Object]]. | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html|LinkedHashMap]]:** Υλοποιεί το Map μέσα από ένα [[wp>Hash_table|HashTable]] με παράλληλη χρήση διπλά συνδεδεμένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Map. Η κλάση που υλοποιεί το κλειδί κάθε εγγραφής πρέπει να υλοποιεί τις μεθόδους [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-|public boolean equals(Object obj)]] και [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--|public int hashCode()]] της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html|java.lang.Object]]. |
| |
===== Παράδειγμα ===== | ===== Παράδειγμα 1ο ===== |
| /* |
| Παραλλάσουμε το παράδειγμα της λίστας, ώστε από τη λίστα να φτιαχτεί ένα ιστόγραμμα το οποίο δείχνει κάθε λέξη πόσες φορές εμφανίζεται μέσα στο κείμενο. Το ιστόγραμμα μπορεί να φτιαχτεί με τη βοήθεια ενός ''Map<String,Integer>'', όπου τα κλειδιά είναι οι λέξεις του κειμένου και οι τιμές είναι η συχνότητα εμφάνισης της λέξης μέσα στο κείμενο. |
| |
| <code java MapExample.java> |
| 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]+"\""); |
| } |
| } |
| } |
| |
| </code> |
| |
| <WRAP todo 80% center round> |
| Τι θα γίνει εάν στο παραπάνω παράδειγμα αντί για [[https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html|java.util.TreeMap]] χρησιμοποιήσουμε [[https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html|java.util.HashMap]]; Σημειώστε ότι η κλάση [[https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html|java.util.TreeMap]] υλοποιεί τα interfaces [[https://docs.oracle.com/javase/8/docs/api/java/util/Map.html|java.util.Map]] και [[https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html|java.util.SortedMap]], ενώ η κλάση [[https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html|java.util.HashMap]] μόνο τη interface [[https://docs.oracle.com/javase/8/docs/api/java/util/Map.html|java.util.Map]]. Δοκιμάστε το... |
| </WRAP> |
| |
| ===== Παράδειγμα 2ο ===== |
| */ |
<code java StudentMap.java> | <code java StudentMap.java> |
import java.util.*; | import java.util.*; |
</code> | </code> |
| |
|Προηγούμενο: [[:java:jfc_intf_list | Interface java.util.List ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:jfc_intf_sort | Sorting ]] | | |Προηγούμενο: [[:java:jfc_intf_list | Interface java.util.List ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:jfc_algorithms | Αλγόριθμοι ]] | |
| |
| |
| |