la valeur de n est lue au début de l’exécution ou est un argument du programme. Ensuite, ce dernier
affiche la collection construite afin qu’on puisse constater qu’elle est bien triée.
A. Dans la première version du programme la collection est une sorte de List<Integer> (par
exemple un ArrayList ou une LinkedList) que vous triez, après la construction, en utilisant
une méthode statique ad hoc de la classe Collections.
B. Dans une deuxième version, la collection est une sorte de Set<Integer> (c’est-à-dire un
HashSet ou un TreeSet, mais avez-vous le choix ?) si bien qu’elle est constamment triée.
5.2. Table associative : un annuaire
On vous demande d’écrire une classe Annuaire pour mémoriser des numéros de téléphone et
d’adresses. Chaque entrée est représentée par une fiche à plusieurs champs : un nom, un numéro et
une adresse. La structure des fiches est décrite par une classe Fiche que vous devez écrire.
Écrivez également une classe Annuaire comportant une table associative
(Map<String,Fiche>) qui sera faite d’associations ( un_nom , une_fiche ).
A. Dans un premier temps, la table associative en question sera une instance de la classe HashMap.
Écrivez un programme répétant les opérations suivantes
•lecture d’une « commande » d’une des formes : +nom, ?nom, ! ou bye,
•si la commande a la forme ?nom, recherche et affiche la fiche concernant le nom indiqué,
•si la commande est de la forme +nom, saisie des autres informations d’une fiche associée à
ce nom et insertion de la fiche correspondante dans l’annuaire,
•si la commande est !, affichage de toutes les fiches de l’annuaire,
•si la commande est . (un point), arrêt du programme.
B. On constate que la commande ! produit l’affichage des fiches dans un ordre imprévisible. Que
faut-il changer dans le programme précédent pour que les fiches apparaissent dans l’ordre des
noms ?
C. Faites en sorte qu’à la fin (resp. au début) du programme l’annuaire soit enregistré (resp. lu) dans
un fichier nommé annuaire.obj. Utilisez des flux ObjectInputStream et
ObjectOutputStream (que l’on doit créer à partir de flux FileInputStream et
FileOutputStream préexistants).
N’oubliez pas d’autoriser (par un énoncé « implements Serializable ») la « sérialisation »
des objets qui doivent être écrits ou lus dans le fichier (voir cours).
5.3. Affichage de l’environnement d’un programme
Les applications Java accèdent à un ensemble de « propriétés système » qui définissent des aspects
de leur environnement d’exécution, comme la version de la machine Java, le système d’exploitation
sous-jacent, le répertoire de travail, etc. Ces propriétés sont codées sous forme de couples de
chaînes (clé, valeur), et on les obtient par un appel System.getProperties() qui renvoie un
objet Properties qui est une variété de table associative (Map). En fait, de Map<Object,
Object> depuis Java5. Donc il ne sert à rien de se servir des Generics ici.