[Résolu] hashmap - comment utiliser containsKey ?

hashmap - comment utiliser containsKey ? [Résolu] - Java - Programmation

Marsh Posté le 14-02-2004 à 21:17:55    

Petite question avec la collection Hashmap.
 
Donc ma hashmap contient une clé qui est un objet Auteur et la partie valeur est une collection d'objet Livre.
 
Je dois ajouter un livre a un auteur seulement si celui-ci est deja dans la hashmap.  
 
Voici ma fonction addLivre :
 

Code :
  1. public void addLivre(Livre l) {
  2.      Auteur temp = new Auteur(l.getCodeAuteur());
  3. if (bd.containsKey(temp)) {
  4.       ((ArrayList) bd.get(temp)).add(l);
  5. }
  6. }


 
Cependant il ne trouve jamais l'auteur même si le Auteur.equals devrais retourner true en théorie. :
 

Code :
  1. public boolean equals(Object o) {
  2.  if (o instanceof Auteur) {
  3.   Auteur a = (Auteur) o;
  4.   return code.equals(a.code);
  5.  }
  6.  return false;
  7. }


 
Auriez-vous une idée pourquoi?  
 
Merci !!!


Message édité par belzme le 15-02-2004 à 18:00:42
Reply

Marsh Posté le 14-02-2004 à 21:17:55   

Reply

Marsh Posté le 14-02-2004 à 21:33:24    

tu dois surcharger la méthode hashcode

Reply

Marsh Posté le 14-02-2004 à 22:25:43    

j'ai redéfini hashCode dans auteur de la façon suivante :
 

Code :
  1. public int hashCode() {
  2.  return code.hashCode();
  3. }


 
Pourtant ca ne fonctionne toujours pas ;(

Reply

Marsh Posté le 14-02-2004 à 22:33:38    

BelzME a écrit :

Pourtant ca ne fonctionne toujours pas ;(


ben ca devrait.
 
teste mieux


Message édité par benou le 14-02-2004 à 22:33:47
Reply

Marsh Posté le 14-02-2004 à 22:56:26    

En effet tu a raison,
 
Mon problème est lié au fait que mon code est composé de la façon suivante : A085
 
cependant dans la classe auteur je dois absolument accepté un constructeur prenant le code en format int (donc seulement le 085) et ensuite j'initialise code avec this.code = "A"+code;
 
Cependant lorsque je fait :
 
Auteur temp = new Auteur(Integer.parseInt(l.getCodeAuteur().substring(1)));
 
Le code devient A85 au lieu de A085.
 
Comment je peux conserver le 0 proprement ?

Reply

Marsh Posté le 14-02-2004 à 23:40:52    

avec java.text.DecimalFormat :  

Code :
  1. int i = 38;
  2.  NumberFormat formater = new DecimalFormat("000" );
  3.  System.out.println("i = " + formater.format(i));


Citation :

i = 038

Reply

Marsh Posté le 15-02-2004 à 17:53:04    

Merci bcp Benou :)

Reply

Sujets relatifs:

Leave a Replay

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