[Java] HashMap ou TreeMap

HashMap ou TreeMap [Java] - Java - Programmation

Marsh Posté le 08-02-2004 à 20:20:22    

Je suis actuellement un cours en java ou on revise présentement les notions de Collections.  Pour le travail pratique qu'on me demande de faire, je dois faire une BDD de gestion d'auteur (la clé) et de livres (les valeurs).  Pour mieux comprendre, voici une partie de l'énoncé du T.P.  
 

Citation :

Énoncé : On se propose de gérer une banque de données composée de collections d?éléments représentant des oeuvres littéraires ainsi que leurs auteurs.
 
 
Un auteur est représenté par :
 
code  4 caractères alphanumériques débutant par la lettre ?A?.
nom  30 caractères (maximum) sous la forme nom(s) de famille, prénom(s).
pays d?origine  4 caractères (maximum).
 
 
Un livre est représenté par :
 
code  4 caractères alphanumériques débutant par la lettre ?L?.
titre 40 caractères (maximum).
catégorie 12 caractères (maximum).
code de l?auteur 4 caractères alphanumériques débutant par la lettre ?A? .
prix un réel.
nombre de pages un entier.
 
a) Vous devez écrire une classe pour conserver et traiter les attributs d?un auteur.  
 
b) Vous devez aussi écrire une classe pour conserver et traiter les attributs d?un livre.
 
c) Vous devez utiliser une map pour conserver les objets représentant les auteurs ainsi que leurs oeuvres.  
? La partie clé de la map :
1. La clé devra contenir tous les attributs d?un auteur.  
2. Chaque auteur se distingue par son code qui est unique (pas de doublons).  
3. Les auteurs doivent être accessible en ordre alphabétique du nom.
? La partie valeur de la map :
1. La valeur sera une collection contenant les objets livres écrits par cet auteur.
2. Les livres de cette collection doivent être accessibles dans l?ordre alphabétique de leur titre.
3. Pour simplifier le problème, les doublons ne sont pas permis pour les livres.
? Un livre ne peut être ajouté à la map que si l?auteur y est déjà présent.


 
Le prof demande d'avoir la solution la plus performante possible tout en justifiant notre choix.
 
Donc si j'utilise une hashmap, les itérations sont plus rapides, cependant je devrai créer une collection temporaire pour afficher les auteurs triés par noms (enfin je crois?).
 
Si j'utilise une TreeMap les performances seront moindres, mais en théorie je n'aurais pas à retrier les informations.
 
Qu'en pensez-vous ? Est-ce que j'ai oublié quelque chose?
 
Merci!

Reply

Marsh Posté le 08-02-2004 à 20:20:22   

Reply

Marsh Posté le 08-02-2004 à 20:23:39    

ben t'as tout dit. l'accès à une Hashmap est o(1) amorti mais comme tu dis la TreeMap maintient l'ordre, ce qui a un cout. raconte la meme chose à ton prof. moi je garderais la treemap je crois


Message édité par Taz le 08-02-2004 à 20:24:18
Reply

Marsh Posté le 08-02-2004 à 20:32:07    

pareil que Taz. D'apres mon experience personnelle, les profs de java aiment bien qu'on utilise les classes du jdk quand ca correspond à nos besoins. Donc à mon avis il vaut mieux garder TreeMap plutot que HashMap + une couche supplémentaire pour trier. a moins que tu fasse beaucoup mieux en terme de performances avec l'autre solution, mais j'en doute.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 08-02-2004 à 20:32:11    

Sauf que je viens de voir quelque chose, c'est le code d'auteur qui doit être la clé unique, donc par défaut mon TreeMap serait trié par code d'auteur non ?  
 
Peut-être que je pourrais faire le equals sur le code d'auteur et le compareTo sur le nom, mais je crois pas que ce soit très propre. (enfin peut-être que je me trompe?)
 

Reply

Marsh Posté le 08-02-2004 à 20:34:47    

toutes façons, si tu as des contraintes sur plus d'un champ, dans tous les cas, t'aura une résolution de conflit trivial (accès rapide) et le reste se résoudra en balayant toute la collection. à moins de maintenir plusieurs structures en parallèle

Reply

Marsh Posté le 08-02-2004 à 20:40:44    

BelzME a écrit :

Sauf que je viens de voir quelque chose, c'est le code d'auteur qui doit être la clé unique, donc par défaut mon TreeMap serait trié par code d'auteur non ?  
 
Peut-être que je pourrais faire le equals sur le code d'auteur et le compareTo sur le nom, mais je crois pas que ce soit très propre. (enfin peut-être que je me trompe?)
 
 

Apres relecture de l'enonce, je pense pas que ce soit un problème. La clé dans ta map doit contenir tous les attributs d'un auteur. Donc tu vas utiliser comme clé un objet qui contient les attributs de ton auteur (code + nom + pays).
Donc comme tu le dis il faut faire le equals() sur le code, et le compareTo() sur le nom. C'est pas très très propre, mais si tu fais attention à ce que ton compareTo() renvoie 0 si equals() renvoie vrai, ca reste cohérent.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 08-02-2004 à 20:59:08    

Cependant, il n'y a que la production de rapport dans un fichier texte qui exige que les données soient présentées en ordre d'auteur.  Donc dans ce cas, n,est t'il pas mieux d'utiliser une hashmap afin de bénéficier d'une recherche plus rapide pour les usagers, même si cela nécessite de copier la hashmap dans une treemap afin de produire le rapport ?  
 
Existe t'il une fonction qui permet de créer une treemap avec le contenu d'une autre map ou dans un autre type de collection?
 
Merci bcp de votre aide !


Message édité par belzme le 08-02-2004 à 21:00:50
Reply

Marsh Posté le 12-01-2007 à 18:50:55    

bonjour; je suis une etudiante et je fait une autoformation en java en cherchant sur internet j ai trouvé ce tp sur le site de votre univercité, mais j arrive pas a le resoudre!! si tu peux me passer la solutionje serai reconaissante!! merci!
NB: j ai deja demandé ca a votre prof mais la personne qui m a repondu m a dit qu'il ne leur autorise pas ce genre de chose avant la remise des TP!
merci d avance

Reply

Marsh Posté le 13-01-2007 à 11:11:44    

non

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed