API Map
Rappels sur les Map
Après avoir découvert et manipulé l'API Collection, abordons une autre interface importante : Map, qui d'ailleurs ne
fait pas partie de l'API Collection, mais permet de gérer des collections de données. Dans la partie suivante,
nous aurons besoin d'afficher les heures de décollage de l'avion dans le fuseau horaire de l'aéroport. Pour préparer
le terrain, nous allons faire correspondre chaque aéroport avec son fuseau horaire associé. Nous utiliserons une collection de type clé / valeur : les Map
.
Les implémentations de Map
En Java, l'interface Map a plusieurs implémentations, chacune ayant des caractéristiques et des utilisations spécifiques. Voici les plus courantes :
HashMap
: Accès rapide, ordre non garanti.LinkedHashMap
: Accès rapide, ordre d'insertion conservé.TreeMap
: Clés ordonnées selon un critère de tri.
Exemple d'utilisation
Map<Integer, String> ages = new HashMap<>();
Map<Long, Double> linkedAges = new LinkedHashMap<>();
Map<String, Float> sortedAges = new TreeMap<>();
Pourquoi utilise-t-on les classes wrapper ?
Il est possible d'utiliser des types primitifs (comme int, float, char), mais ils sont automatiquement encapsulés dans leurs classes wrapper correspondantes (Integer, Float, Character, etc.) grâce à l'autoboxing lorsqu'ils sont utilisés dans un Map. On préfère donc directement utiliser les wrappers.
On ajoute un élément(paire clé/valeur) à une Map
avec la méthode put
:
On accède à la valeur d'une clé avec get
:
On supprime une clé/valeur avec remove
(notez que la valeur est renvoyée en retour) :
Création de l'enum Airport
Pour gérer les différents fuseaux horaires, nous commencerons par créer une enum appelée Airport
qui representera l'ensemble des aéroports disponibles pour nos voyages.
À vous de jouer
Commencez par déclarer l'énumération Airport
avec les valeurs suivantes :
PARIS_CHARLES_DE_GAULLE("CDG")
PARIS_ORLY("ORY")
NEW_YORK_JFK("JFK")
NEW_YORK_NEWARK("EWR")
NEW_YORK_LAGUARDIA("LGA")
TOKYO_NARITA("NRT")
TOKYO_HANEDA("HND")
Chaque constante aura un attribut acronym
pour stocker son acronyme. N'oubliez pas d'ajouter un constructeur pour initialiser cet attribut, ainsi qu'une méthode getAcronym()
pour le récupérer.
Exemple
Cet exemple crée une énumération Color
avec trois constantes représentant des couleurs, chacune avec un nom français.
Chaque constante possède une méthode pour obtenir son nom français et la méthode toString()
est redéfinie pour retourner ce nom lors de l'affichage.
Maintenant, pour faire correspondre chaque aéroport à son fuseau horaire, nous allons créer une classe AirportManager
. Cette classe utilisera une Map
pour stocker le fuseau horaire lié à l'aéroport.
À vous de jouer
Créez une classe AirportManager
puis déclarez une Map statique timeZone
qui associera chaque aéroport à son fuseau horaire.
On pourra utiliser les coefficients suivants :
PARIS_CHARLES_DE_GAULLE
:Europe/Paris
PARIS_ORLY
:Europe/Paris
NEW_YORK_JFK
:America/New_York
NEW_YORK_NEWARK
:America/New_York
NEW_YORK_LAGUARDIA
:America/New_York
TOKYO_NARITA
:Asia/Tokyo
TOKYO_HANEDA
:Asia/Tokyo
Pourquoi utiliser un attribut et une méthode statique ?
L'usage d'éléments statiques dans la classe AirportManager
permet d'accéder aux fuseaux horaires des
aéroports sans créer une instance de la classe, ce qui est pratique car ces informations sont communes et ne
changent pas selon les instances. Cela simplifie l'accès aux données et économise la mémoire.
- Pensez à changer le type des attributs
departure
etarrival
pour les définir comme étant de typeAirport
.
Une autre manière de faire pour stocker les fuseaux horaires aurait été de les stocker directement dans l'enum, dans un attribut d'enum (comme cela a été fait pour les acronymes).
Récapitulatif
Dans cette partie, nous avons examiné comment utiliser l'énumération Airport
et créer notre Map de fuseaux horaires.
Cette dernière sera utilisée ultérieurement pour afficher l'heure de décollage des avions pour chaque voyage dans leur
fuseau horaire spécifique.
N'oubliez pas de Commit
votre travail !