Ένας Map είναι μια δομή δεδομένων για την αποθήκευση ζευγών κλειδιού-τιμής. Μοιάζει με τα λεξικά άλλων γλωσσών προγραμματισμού. Η διεπαφή Map ορίζει τις λειτουργίες πάνω σε έναν map.
Η Java έχει αρκετές διαφορετικές υλοποιήσεις του Map. Το HashMap είναι μία από τις πιο συνηθισμένες.
// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();
Πρόσθεσε καταχωρήσεις στον map χρησιμοποιώντας τη μέθοδο put.
fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }
Μόνο μία τιμή μπορεί να συσχετιστεί με κάθε κλειδί.
Η κλήση της put με το ίδιο κλειδί θα ενημερώσει την τιμή του κλειδιού.
fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }
Χρησιμοποίησε τη get για να πάρεις την τιμή ενός κλειδιού.
fruitPrices.get("apple"); // => 100
Χρησιμοποίησε τη containsKey για να δεις αν ο map περιέχει ένα συγκεκριμένο κλειδί.
fruitPrices.containsKey("apple"); // => true
fruitPrices.containsKey("orange"); // => false
Αφαίρεσε καταχωρήσεις με τη remove.
fruitPrices.put("plum", 90); // Add plum to map
fruitPrices.remove("plum"); // Removes plum from map
Η μέθοδος size επιστρέφει τον αριθμό των καταχωρήσεων.
fruitPrices.size(); // Returns 2
Μπορείς να χρησιμοποιήσεις τις μεθόδους keySet ή values για να πάρεις τα κλειδιά ή τις τιμές ενός Map ως Set ή συλλογή αντίστοιχα.
fruitPrices.keySet(); // Returns "apple" and "pear" in a set
fruitPrices.values(); // Returns 100 and 80, in a Collection
Σε αυτή την άσκηση θα γράφεις κώδικα για να διαχειρίζεσαι ένα λεξικό με διεθνείς κωδικούς κλήσης χρησιμοποιώντας ένα Map.
Το λεξικό επιτρέπει την αναζήτηση του ονόματος μιας χώρας (της τιμής του Map, ως String) μέσω του διεθνούς κωδικού κλήσης (του κλειδιού του Map, ως Integer).
Υλοποίησε τη μέθοδο getCodes που δε δέχεται παραμέτρους και επιστρέφει ένα Map με τους κωδικούς κλήσης και τις αντίστοιχες χώρες που βρίσκονται αυτή τη στιγμή στο λεξικό.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map
Το λεξικό πρέπει να γεμίσει με δεδομένα.
Υλοποίησε τη μέθοδο setDialingCode που δέχεται έναν κωδικό κλήσης και την αντίστοιχη χώρα και προσθέτει τον κωδικό κλήσης και τη χώρα.
Αν ο κωδικός κλήσης υπάρχει ήδη στο Map, ενημέρωσε το Map με τον κωδικό και τη χώρα που δίνονται.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }
dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }
Υλοποίησε τη μέθοδο getCountry που δέχεται έναν κωδικό κλήσης και επιστρέφει το όνομα της χώρας με αυτόν τον κωδικό κλήσης.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"
Όταν προσθέτεις έναν κωδικό κλήσης, πρέπει να προσέξεις ώστε να μην προστεθεί δύο φορές ένας κωδικός ή μια χώρα.
Σε τέτοιες περιπτώσεις, μπορείς να υποθέσεις ότι η πρώτη καταχώριση είναι η σωστή.
Υλοποίησε τη μέθοδο addNewDialingCode που προσθέτει μια καταχώριση για τον δεδομένο κωδικό κλήσης και τη χώρα.
Ωστόσο, σε αντίθεση με τη setDialingCode, δε κάνει τίποτα αν ο κωδικός κλήσης ή η χώρα υπάρχουν ήδη στο Map.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addNewDialingCode(32, "Belgium");
dialingCodes.addNewDialingCode(379, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
dialingCodes.addNewDialingCode(32, "Other");
dialingCodes.addNewDialingCode(39, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
Είναι σπάνιο, αλλά μπορούν να γίνουν λάθη.
Για να διορθώσουμε το λάθος, θα χρειαστεί να ξέρουμε σε ποιον κωδικό κλήσης αντιστοιχίζεται αυτή τη στιγμή η χώρα.
Για να βρεις ποιος κωδικός κλήσης πρέπει να διορθωθεί, υλοποίησε τη μέθοδο findDialingCode που δέχεται μια χώρα και επιστρέφει τον κωδικό κλήσης της χώρας.
Επίστρεψε null αν η χώρα δεν βρίσκεται στο Map.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44
dialingCodes.findDialingCode("Unlisted");
// => null
Τώρα που ξέρουμε ποιος κωδικός κλήσης πρέπει να διορθωθεί, προχωράμε στην ενημέρωση του κωδικού.
Υλοποίησε τη μέθοδο updateCountryDialingCode που δέχεται τον νέο κωδικό κλήσης της χώρας και το όνομα της χώρας και ενημερώνει ανάλογα.
Μην κάνεις τίποτα αν η χώρα δεν βρίσκεται στο Map (καθώς αυτή η μέθοδος προορίζεται μόνο για τη διόρθωση λαθών).
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }
dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }
dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.