Une Map est une structure de données qui stocke des paires clé-valeur. Elle ressemble aux dictionnaires d'autres langages de programmation. L'interface Map définit les opérations applicables à une Map.
Java propose différentes implémentations de Map. HashMap est l'une des plus utilisées.
// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();
Pour ajouter des entrées à la Map, utilise put.
fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }
Une seule valeur peut être associée à chaque clé.
Appeler put avec la même clé met à jour la valeur associée à cette clé.
fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }
Pour obtenir la valeur associée à une clé, utilise get.
fruitPrices.get("apple"); // => 100
Pour savoir si la Map contient une clé donnée, utilise containsKey.
fruitPrices.containsKey("apple"); // => true
fruitPrices.containsKey("orange"); // => false
Pour supprimer des entrées, utilise remove.
fruitPrices.put("plum", 90); // Add plum to map
fruitPrices.remove("plum"); // Removes plum from map
La méthode size renvoie le nombre d'entrées.
fruitPrices.size(); // Returns 2
Tu peux utiliser les méthodes keySet ou values pour obtenir respectivement les clés ou les valeurs d'une Map sous forme d'un Set ou d'une collection.
fruitPrices.keySet(); // Returns "apple" and "pear" in a set
fruitPrices.values(); // Returns 100 and 80, in a Collection
Dans cet exercice, tu vas écrire du code pour gérer un dictionnaire d'indicatifs téléphoniques internationaux à l'aide d'une Map.
Le dictionnaire permet de retrouver le nom d'un pays (la valeur de la Map, de type String) à partir de l'indicatif téléphonique international (la clé de la Map, de type Integer).
Map
Implémente la méthode getCodes qui ne prend aucun paramètre et renvoie une Map associant les indicatifs téléphoniques aux pays actuellement présents dans le dictionnaire.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map
Le dictionnaire doit être rempli.
Implémente la méthode setDialingCode qui prend un indicatif téléphonique et le pays correspondant, puis ajoute cet indicatif et ce pays.
Si l'indicatif téléphonique est déjà dans la Map, mets à jour celle-ci avec l'indicatif et le pays fournis.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }
dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }
Implémente la méthode getCountry qui prend un indicatif téléphonique et renvoie le nom du pays correspondant à cet indicatif.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"
Lorsque tu ajoutes un indicatif téléphonique, il faut faire attention à ne pas ajouter deux fois le même indicatif ou le même pays.
Dans ce cas de figure, on considère que la première entrée est la bonne.
Implémente la méthode addNewDialingCode qui ajoute une entrée pour l'indicatif téléphonique et le pays donnés.
Cependant, contrairement à setDialingCode, elle ne fait rien si l'indicatif téléphonique ou le pays est déjà dans la 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" }
C'est rare, mais des erreurs peuvent se produire.
Pour corriger l'erreur, il faut savoir à quel indicatif téléphonique le pays est actuellement associé.
Pour trouver quel indicatif téléphonique doit être corrigé, implémente la méthode findDialingCode qui prend un pays et renvoie son indicatif téléphonique.
Renvoie null si le pays n'est pas dans la Map.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44
dialingCodes.findDialingCode("Unlisted");
// => null
Maintenant que l'on sait quel indicatif téléphonique doit être corrigé, on peut le mettre à jour.
Implémente la méthode updateCountryDialingCode qui prend le nouvel indicatif téléphonique du pays et le nom du pays, puis met à jour l'entrée en conséquence.
Ne fais rien si le pays n'est pas dans la Map (cette méthode ne sert qu'à corriger des erreurs).
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }
dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }
dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.